Spring Security H2Database 403 或登录出现页面空白

前言

  • 此文也是自己在编程上遇到问题的一些记录,希望能给大家带来一些帮助😂

问题

Spring Boot 启用 Spring Security 以后发现 H2 Database 的控制台登陆页面是无法访问的。

情况 1 :

能进去控制台的登陆页面(输入数据库用户名和密码的页面),但是登陆以后出现白标签页错误( White Label Error ) ,返回码是 403

白标签页错误403.png

情况 2 :

能进去控制台的登陆页面(输入数据库用户名和密码的页面),但是登陆以后出现界面是无法显示(空白页面)。

原因分析

因为是启用 Spring Security 以后出现的问题,问题根源可能就是 Spring Security 的安全配置问题。我们可以去开启 Spring Security 的 debug 日志,查看日志分析原因,但是详细的分析这里就不细说了。

Spring Boot 在配置文件启用 Security 模块的日志输出如下,具体是设置 org.springframework.security 包的日志输出级别为debug

logging:
  level:
    root: info
    com.hdfg159: debug
    org:
      springframework:
        web: debug
        security: debug

解决方案

根据上面的日志输出,我们可以得到问题的根源。

情况 1 :

Spring Security 默认开启了 CSRF 的保护,H2Database 相关的请求需要携带 CSRF Token 及相关参数,所以访问时候出现了 403 。

方案 1 :

我们可以去修改 Spring Security 的相关安全配置,把 CSRF 保护关掉,编写安全配置文件继承 WebSecurityConfigurerAdapter 并覆写 protected void configure(HttpSecurity http) throws Exception 方法,加入以下代码:

http.csrf().disable();

不过不建议这样做,安全性不高。

方案 2 :

操作同方案 1 ,但是配置项写法不一样,具体代码如下(
/h2-console 是配置好的 H2Database 控制台访问路径):

http.csrf().ignoringAntMatchers("/h2-console/**")

情况2:

Spring Security 默认页面不允许 iframe (不安全),会在响应头返回:

X-Frame-Options:DENY

导致 H2Database 访问页面空白,解决方案也是有两种,同理情况 1 中配置 CSRF 的方式。

方案 1 :

禁用 frameOptions(),具体代码如下:

http.headers().frameOptions().disable();
方案 2 :

允许同源使用 iframe ,具体代码如下:

http.headers().frameOptions().sameOrigin();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容