关于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,我认为和上文所述的第一种方法大同小异,故没有去验证,有兴趣的朋友不妨一试!