我们需要在基于CQ5 / AEM的应用程序中设置以下响应标头。
Http Header:帧选项设置X-Frame-Options:SAME ORIGIN Http Header:严格的传输安全严格 - 传输 - 安全:max-age = 10886400; includeSubDomains;预加载
我在之前的应用程序中使用servlet过滤器拦截请求时做了类似的更改。同样,我尝试将SlingFilter用于此应用程序。但是,对于每个请求,它似乎被多次调用(当它下载js,css,json文件等时)。请参阅下面的代码段,
@SlingFilter(scope = SlingFilterScope.COMPONENT, order = Integer.MIN_VALUE)
@Properties({
@Property(name="pattern",value="/soni/template/", propertyPrivate=false)
})
public class ResponseHeaderFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
try {
HttpServletResponse httpResponse = (HttpServletResponse)response;
httpResponse.setHeader("Strict-Transport-Security", "max-age=10886400; includeSubDomains");
filterChain.doFilter(request, httpResponse);
httpResponse.setHeader("X-Frame-Options", "SAMEORIGIN");
} catch (Exception e) {
e.printStackTrace();
}
}
这是在CQ5 / AEM中执行此操作的正确方法吗?如何将此限制为每页请求一次? 或者是否有更好的方法来执行调度员等配置?
答案 0 :(得分:0)
由于您使用的是 Component 范围,因此每次包含组件时都会调用此过滤器,这不是您的意图。
请使用请求范围:
scope = SlingFilterScope.REQUEST
参考此页: https://sling.apache.org/documentation/the-sling-engine/filters.html