在CQ5 / AEM中设置响应头

时间:2016-06-16 21:34:00

标签: cq5 aem

我们需要在基于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中执行此操作的正确方法吗?如何将此限制为每页请求一次? 或者是否有更好的方法来执行调度员等配置?

1 个答案:

答案 0 :(得分:0)

由于您使用的是 Component 范围,因此每次包含组件时都会调用此过滤器,这不是您的意图。

请使用请求范围:

scope = SlingFilterScope.REQUEST

参考此页: https://sling.apache.org/documentation/the-sling-engine/filters.html