关于X-Frame-Options的配置,从网上搜索资料,大部分都描述了Apache、Ngix、IIS如何配置此项,但常用的tomcat如何配置?涉及Spring Security如何处理?这类问题还是没有找到现成的方案,动手折腾好了,遂整理下来,供自己和别人参考!
Spring Security下,X-Frame-Options默认为DENY,非Spring Security环境下,X-Frame-Options的默认大多也是DENY,这种情况下,浏览器拒绝当前页面加载任何Frame页面,设置含义如下:
DENY:浏览器拒绝当前页面加载任何Frame页面
SAMEORIGIN:frame页面的地址只能为同源域名下的页面
ALLOW-FROM:origin为允许frame加载的页面地址。
在tomcat8以后的版本中,可以通过在web.xml中定义filter设置X-Frame-Options,如下:
<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>
</filter-mapping>
根据大家的说法,这样的配置会覆盖掉Spring Security中的配置,但在下这里却恰恰相反,还是Spring 4 Security中默认的DENY更加顽固,查Spring Security手册,有点乱,好在看明白了,配置如下:
<security:http entry-point-ref="casAuthenticationEntryPoint" create-session="always" auto-config="true">
<security:headers>
<security:frame-options policy="SAMEORIGIN"/>
</security:headers> 这样就把Spring 4 Security中的X-Frame-Options的默认DENY改掉了!
据说还有一种办法,那就是自己实现一个filter,我认为和上文所述的第一种方法大同小异,故没有去验证,有兴趣的朋友不妨一试!
本文探讨了在Spring Security框架下遇到的X-Frame-Options跨域访问问题。默认设置为DENY,阻止了页面在Frame中加载。在Tomcat 8及以上版本,可以通过修改web.xml配置filter来设定X-Frame-Options,但实践中发现Spring Security的DENY配置仍然生效。解决方案是调整Spring Security的配置,以允许特定来源的Frame加载。另外,文中提及可以通过自定义filter实现相同功能,但未进行验证。
5177

被折叠的 条评论
为什么被折叠?



