Spring 配置的 H2 控制台 frameOptions 导致无法访问

404 阅读1分钟

Spring H2 控制台访问登录以后的内容无法显示。

访问的时候会看到下面的情况。

[![spring-h2-console-01](https://cdn.ossez.com/discourse-uploads/optimized/1X/9efcd6dc86fbc65aabfaa6191ef48fbe7d2686b3_2_690x425.png)](https://cdn.ossez.com/discourse-uploads/original/1X/9efcd6dc86fbc65aabfaa6191ef48fbe7d2686b3.png "spring-h2-console-01")

解决办法

这个主要是 Spring 安全设置的问题。

在 Spring 中的 frameOptions 配置为 iframe 的安全配置。

X-Frame-Options 头主要是为了防止站点被别人劫持,所以 iframe 将会在 Spring Security 中默认是拒绝设置的。以防止点击劫持攻击。

要修改这个配置,你可以在 Spring 安全配置中进行下面的配置:

httpSecurity.headers().frameOptions().disable();

上面的选项是完全允许 iframe 。

或者你也可以配置下面:

httpSecurity.headers().frameOptions().sameOrigin();

X-Frame-Options 有三个值:

DENY
表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。

SAMEORIGIN
表示该页面可以在相同域名页面的 frame 中展示。

ALLOW-FROM uri
表示该页面可以在指定来源的 frame 中展示。

[![spring-h2-console-02](https://cdn.ossez.com/discourse-uploads/optimized/1X/45937ff294d39975bbb304f2683c57cfeea0798d_2_690x309.png)](https://cdn.ossez.com/discourse-uploads/original/1X/45937ff294d39975bbb304f2683c57cfeea0798d.png "spring-h2-console-02")

因为我们的控制台配置的是 localhost, 因此我们可以使用 sameOrigin(),因此产生的效果是一样。

www.ossez.com/t/spring-h2…