我为Tomcat实现了CSP过滤器。我正在尝试展示一个在我的Tomcat服务器上本地运行的iframe。
public class CSPFilter implements Filter {
public static final String POLICY = "frame-ancestors https://10.10.11.172";
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) {
if (response instanceof HttpServletResponse) {
((HttpServletResponse)response).setHeader("Content-Security-Policy", CSPFilter.POLICY);
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException { }
@Override
public void destroy() { }
}
并包含在web.xml中
<filter>
<filter-name>CSPFilter</filter-name>
<filter-class>com.vocera.reportservice.CSPFilter</filter-class>
;
</filter>
<filter-mapping>
<filter-name>CSPFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
但是我仍然遇到以下错误:
由于祖先违反了以下内容安全策略指令:“frame-ancestors https://10.10.11.172”,因此拒绝了对“https://10.10.11.172:8443/”进行框架设置。
尝试使用“frame-src 'self' https://10.10.11.172;”后,该错误消失了,但页面变成了空白。