Can Tomcat 7 be configured to insert Content-Security-Policy: frame-ancestors \'self\'
HTTP header with every response, like it can insert other security relate
Once it cannot be achieved with Tomcat 7.x built in filters, you could try one of the following options:
If adding a filter to your application is an option, you could use the following code to add a header to every response:
@WebFilter("/*")
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Content-Security-Policy", "frame-ancestors 'self'");
chain.doFilter(request, response);
}
}
Another option is a custom valve. Quoting the steps from this page:
Create a Maven Java Application.
Add the following dependency:
org.apache.tomcat tomcat-catalina 7.0.34 provided
Create your Java class and extend it from ValveBase.
Implement the invoke(Request, Response) method.
Build your library (
.jar
) fileInstall the library in the
${tomcat.home}/lib
directory.Configure the
server.xml
to use your new valve. For example:
- Start the server to see your new valve in action
Your valve implementation could be like:
public class MyValve extends ValveBase {
@Override
public void invoke(Request request, Response response) throws IOException,
ServletException {
HttpServletResponse httpResponse = response.getResponse();
httpResponse.setHeader("Content-Security-Policy", "frame-ancestors 'self'");
getNext().invoke(request, response);
}
}