广告位联系
返回顶部
分享到

Spring Boot中启用H2控制台的完整配置指南

java 来源:互联网 作者:佚名 发布时间:2026-09-26 21:05:03 人浏览
摘要

本文详解如何在 spring boot 应用中正确配置并访问 h2 内存数据库控制台,重点解决因 spring security 拦截导致的登录失败、403 或空白页问题,并提供安全、可复用的 `securityfilterchain` 配置方案。

本文详解如何在 spring boot 应用中正确配置并访问 h2 内存数据库控制台,重点解决因 spring security 拦截导致的登录失败、403 或空白页问题,并提供安全、可复用的 `securityfilterchain` 配置方案。

在 Spring Boot 项目中集成 H2 内存数据库是开发与测试阶段的常见实践,但许多开发者在启用 H2 控制台(/h2-console)后遇到无法登录的问题:浏览器跳转至登录页,输入默认用户名 SA、密码留空(或尝试其他组合)均失败,控制台日志也未报数据库连接错误——这通常并非 H2 配置问题,而是 Spring Security 默认拦截了 `/h2-console/` 路径**。

根本原因在于:Spring Security 2.7+ 引入了基于 SecurityFilterChain 的全新配置模型,默认会对所有端点(包括 /h2-console)强制要求认证;而 H2 控制台本身是一个独立的 Web 应用(基于 iframe 渲染),其运行依赖两个关键条件:

  • 允许匿名访问 /h2-console/** 所有子路径;
  • 允许页面嵌入(即禁用默认的 X-Frame-Options: DENY 头);
  • 禁用 CSRF 保护(H2 控制台表单不携带 CSRF Token)。

? 正确解决方案是定义一个高优先级、专用于 H2 的 SecurityFilterChain Bean,并通过 @Order(5) 确保它在主安全链之前生效(数值越小,优先级越高):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

@Configuration

public class SecurityConfig {

 

    @Bean

    @Order(5)

    public SecurityFilterChain h2FilterChain(

            HttpSecurity http,

            @Value("${spring.h2.console.path:/h2-console}") String h2ConsolePath) throws Exception {

 

        return http

                .securityMatchers(matchers -> matchers

                        .requestMatchers(AntPathRequestMatcher.antMatcher(h2ConsolePath + "/**")))

                .authorizeHttpRequests(authz -> authz

                        .anyRequest().permitAll())

                .headers(headers -> headers

                        .frameOptions(frameOptions -> frameOptions.sameOrigin()))

                .csrf(csrf -> csrf.disable())

                .build();

    }

}

? 关键说明:

  • @Order(5):确保该链优先匹配 /h2-console/**,避免被后续更宽泛的 /** 规则覆盖;
  • AntPathRequestMatcher.antMatcher(...):精准匹配 H2 控制台路径(支持自定义 spring.h2.console.path);
  • .frameOptions().sameOrigin():允许 H2 控制台页面在当前域名下通过 <iframe></iframe> 加载(否则显示“Refused to display … in a frame”);
  • .csrf().disable():必须关闭 CSRF,否则登录表单提交将返回 403;
  • .permitAll():对 H2 路径完全放行,无需认证。

?? 同时,请确认 application.properties(或 application.yml)中已启用 H2 控制台:

1

2

3

4

5

6

7

8

9

10

# application.properties

spring.h2.console.enabled=true

spring.h2.console.path=/h2-console

# 可选:指定数据库名(与 datasource.url 中一致)

spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE

spring.datasource.driver-class-name=org.h2.Driver

spring.datasource.username=sa

spring.datasource.password=

spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

spring.sql.init.mode=always

? 小贴士:

  • 切勿在生产环境启用 H2 控制台:建议使用 @Profile("dev") 或 @ConditionalOnProperty("spring.h2.console.enabled") 包裹 h2FilterChain Bean;
  • 若使用 spring-boot-starter-security 但未自定义任何 SecurityFilterChain,Spring Boot 会自动配置一个默认链(拦截所有请求),此时上述专用链必不可少;
  • 登录 H2 控制台时,JDBC URL 填写控制台中显示的内存库地址(如 jdbc:h2:mem:testdb),用户名为 sa,密码留空(除非显式设置了 spring.datasource.password)。

完成配置后,重启应用,访问 http://localhost:8080/h2-console 即可直接进入控制台界面,无需登录,且可正常执行 SQL 查询与表管理操作。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Spring Boot中启用H2控制台的完整配置指南
    本文详解如何在 spring boot 应用中正确配置并访问 h2 内存数据库控制台,重点解决因 spring security 拦截导致的登录失败、403 或空白页问题,并
  • Java枚举enum深度解析介绍
    为什么需要枚举? 在 Java 开发中,经常需要定义一组固定的常量,比如订单状态、用户角色、星期、季节等。早期的做法是使用public stati
  • JDK26新特性超详细介绍
    JDK 26 于 2026 年 3 月发布,是 JDK 25(LTS)之后的第一个非 LTS 版本。 本版本共有 10 个 JEP,其中 5 个正式特性、4 个预览特性、1 个孵化特性。
  • 使用SpringBoot3整合Spring AI实现具有记忆功能的AI助
    1. 项目概述 本教程详细介绍如何使用 Spring Boot 3 整合 Spring AI 实现一个具有记忆功能的 AI 助手。该实现使用 Redis 作为存储介质,支持用户级
  • SpringBoot整合Spring Security实现权限控制的全过程
    一、权限控制核心概念 在企业级项目中,认证与授权是安全模块的核心: 认证:验证用户身份,确认 你是谁,如用户名密码登录、短信验
  • 基于SpringBoot+七牛云+Quartz实现图片存储与定时清

    基于SpringBoot+七牛云+Quartz实现图片存储与定时清
    一、图片存储方案 1.1 常见图片存储方案 实际项目中会拆分不同功能服务器,提升系统运行效率,图片存储常用三种方案: Nginx 搭建图片服
  • Nutz Dao与Spring集成介绍
    一、集成方式 1、采用Spring的IOC,但是事务还是采用Nutz自己管理控制; 2、采用Spring的声明式事务管理控制; 二、IOC 直接依据数据源注入即
  • 彻底卸载、更换jdk全过程

    彻底卸载、更换jdk全过程
    步骤一、卸载原来的jdk,删除JDK文件夹 刚开始忘放了,这里应该是jdk11 找到你jdk的目录,直接删除文件夹。 步骤二、删除注册表 打开注册
  • SpringBoot注解实现网络限速

    SpringBoot注解实现网络限速
    本文介绍在 Spring Boot 3 中实现多维度网络带宽限速的完整方案。基于令牌桶算法手动实现核心逻辑,通过自定义HandlerInterceptor拦截请求、H
  • SpringBoot利用JSONPath实现高效处理JSON数据
    在日常的后端开发工作中,我们经常需要和 JSON 数据打交道,尤其是要从层级复杂的 JSON 结构里精准提取特定字段。 传统的处理方式,比如
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计