14

我有两个 Web 应用程序:Web 应用程序 (web-app) 和报表 Web。我想在<iframe>. 所以它被浏览器拒绝并出现错误:

X-Frame-选项:拒绝

有什么帮助吗?

4

3 回答 3

19

X-Frame-options 的值可以是 DENY(默认)、SAMEORIGIN 和 ALLOW-FROM uri。根据 Spring Security 文档,您可以告诉 Spring 以这种方式添加自定义标头来覆盖默认行为:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .headers()
            .addHeaderWriter(new XFrameOptionsHeaderWriter(new WhiteListedAllowFromStrategy(Arrays.asList("www.yourhostname.com"))))
    ...
}

和 Spring 应附加 X-Frame-Options: ALLOW-FROM ... 或

 .addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))

对于 X-Frame-Options: SAMEORIGIN 或使其完全禁用

http.headers().frameOptions().disable()
于 2015-01-27T13:19:30.830 回答
9

编辑 (06.2020) - X-Frame 选项已过时:

“frame-ancestors 指令废弃了 X-Frame-Options 标头。如果资源同时具有这两种策略,则应该强制执行 frame-ancestors 策略,而应该忽略 X-Frame-Options 策略。”
https://www.w3.org/TR/CSP2/#frame-ancestors-and-frame-options

所以考虑使用content-security-policy

<headers>
    <content-security-policy policy-directives="frame-ancestors 'self'"/>
</headers>

如果您使用的是 Spring Security 4.x,则以下配置将解决您的问题(假设 webapp 在同一服务器地址上运行)。

XML配置

<http>
    <!-- ... -->

    <headers>
        <frame-options policy="SAMEORIGIN" />
    </headers>
</http>

Java配置

@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        // ...
        .headers().frameOptions().sameOrigin();
    }
}

禁用配置

您也可以禁用它,注意安全风险

http.headers().frameOptions().disable();


背景资料

在 Spring Security 3.2.0 中,引入了安全标头,但默认禁用:
http ://spring.io/blog/2013/08/23/spring-security-3-2-0-rc1-highlights-security-标题/

在 Spring Security 4.x 中,默认情况下启用标头(对于 IFrame:X-Frame-Options:DENY):“Spring Security 4.x 已更改 Java 配置和 XML 配置以要求显式禁用默认值。”
http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html#m3to4-header

来源:http ://docs.spring.io/autorepo/docs/spring-security/4.0.x/reference/html/headers.html#headers-frame-options

于 2015-08-20T14:09:06.770 回答
0

您可以使用

<headers>
  <frame-options policy="SAMEORIGIN"/>
</headers>

<http>您的安全应用程序上下文 XML 中的配置中

于 2015-08-05T10:41:39.683 回答