通过Filter
步骤1:编写Filter类
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
// 若使用Servlet 3.0+注解,可省略web.xml配置(推荐)
@WebFilter(urlPatterns = "/*")
public class XFrameOptionsFilter implements Filter {
// 可配置策略(DENY/SAMEORIGIN/ALLOW-FROM:uri),此处默认SAMEORIGIN
private String policy = "SAMEORIGIN";
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 可选:从web.xml或环境变量读取策略(灵活配置)
String policyParam = filterConfig.getInitParameter("policy");
if (policyParam != null && !policyParam.isEmpty()) {
policy = policyParam;
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("X-Frame-Options", policy); // 添加响应头
chain.doFilter(request, response); // 传递请求
}
@Override
public void destroy() {
// 清理资源(可选)
}
}
步骤2:在WEB-INF/web.xml
中手动注册Filter:
<web-app ...>
<filter>
<filter-name>XFrameOptionsFilter</filter-name>
<filter-class>com.yourpackage.XFrameOptionsFilter</filter-class>
<!-- 可选:动态设置策略(如DENY) -->
<init-param>
<param-name>policy</param-name>
<param-value>DENY</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>XFrameOptionsFilter</filter-name>
<url-pattern>/*</url-pattern> <!-- 匹配所有URL -->
</filter-mapping>
</web-app>
验证: