iframe出现Refused to display ‘url‘ in a frame because it set ‘X-Frame-Options‘ to ‘deny‘无法访问及验证二次登陆的问题

使用Tomcat服务器独立部署,部署完成之后发现iframe嵌入的页面无法打开访问,报错Refused to display ‘url’ in a frame because it set ‘X-Frame-Options’ to ‘deny’

这是SpringSecurity 防止恶意注入,所以设置了 X-Frame-Options 为deny,

部分做法:扩展WebSecurityConfigurerAdapter类,增加如下代码

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

但加这个配置后,响应头中就找不到这个配置了。在tomcat 中X-Frame-Options未配置。
点击劫持(ClickJacking)是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。
HTTP 响应头信息中的X-Frame-Options,可以指示浏览器是否应该加载一个 iframe 中的页面。如果服务器响应头信息中没有X-Frame-Options,则该网站存在ClickJacking攻击风险。网站可以通过设置 X-Frame-Options 阻止站点内的页面被其他页面嵌入从而防止点击劫持。

修改web服务器配置,添加X-Frame-Options响应头。赋值有如下三种:

1、DENY:不能被嵌入到任何iframe或者frame中。
2、SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中。
3、ALLOW-FROM $uri:只能被嵌入到指定域名的框架中。
在tomcat下的conf里的web.xml中增加以下过滤器

<filter>
        <filter-name>httpHeaderSecurity</filter-name>
        <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
        <init-param>
            <param-name>antiClickJackingOption</param-name>
            <param-value>SAMEORIGIN</param-value>
        </init-param>
        <async-supported>true</async-supported>
    </filter>
<filter-mapping>
        <filter-name>httpHeaderSecurity</filter-name>
        <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>