Spring Security H2Database 403 或

2019-01-22  本文已影响0人  hdfg159

前言

问题

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();
上一篇下一篇

猜你喜欢

热点阅读