IE8的P3P设置标头似乎不起作用

时间:2015-02-11 02:47:41

标签: jsp header cas p3p

以下P3P setHeader代码出现在我的CASresponse jsp中,但似乎不起作用,

response.setHeader("P3P","policyref=\"http://sso.mydomain.net/w3c/p3p.xml\", 
CP=\"CAO IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");

我在这里遗漏了什么吗?我无法在IE8中获取第三方cookie。

标题中是否需要policref?我应该为我的域设置p3p策略吗?

由于CAS请求应该在所有请求进入CAS时设置吗?说我有entryFilter.java我应该在那里设置P3P标头?或者在创建cookie之后。

当IE将302重定向到我的serviceUrl时,我无法保留cookie。

3 个答案:

答案 0 :(得分:4)

简短回答:)

您可以简单地将标题添加为

response.setHeader("P3P", "CP=\"CAO IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");

但是由于您需要所有资源的标题,最好选择过滤器

public class P3PFilter implements Filter {

    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse resp = (HttpServletResponse) res;
        resp.addHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
        filterChain.doFilter(req, resp);
    }

    public void init(FilterConfig arg0) throws ServletException {
    }
}

答案很长

我曾经遭遇同样的问题。可能就像你一样,我完成了我的作业,并对P3P政策是什么以及如何使用它有了一个公平的理解。我一次引用的是

官方链接

http://www.w3.org/P3P/

http://p3ptoolbox.com/guide/

知名博客

http://www.marco.org/2007/04/27/p3p-sucks-how-to-get-frame-cookies-unblocked-in-ie6

http://www.techrepublic.com/blog/software-engineer/craft-a-p3p-policy-to-make-ie-behave/

值得注意的问题

Cookie blocked/not saved in IFRAME in Internet Explorer

P3P Policy not working to allow 3rd party cookies in IE

尽管如此,我仍未能使其正常工作。我没有意识到的,以及我在amazing book的帮助下最终学到的是,引用

  

为Internet Explorer用户设置第三方Cookie(使用   默认安全设置),您需要返回一个特殊的P3P HTTP   标头与您的资源,声明您的服务打算如何   使用用户数据。需要使用 ALL HTTP返回此标头   您的资源的响应,而不仅仅是那些设置cookie的响应。这个   表示静态资源,AJAX端点,iframes-everything。

我怀疑这也可能是您的问题,我使用的P3P政策几乎与您的政策完全相同,因此您不会因无效政策而被拒绝。

我设置的标头没有指向p3p政策的网址,如techrepublic博客

中所述
  

IE不会将紧凑策略与完整格式策略进行比较   不需要全格式政策

这在我的测试中证明是正确的。这意味着您可以将标题添加为

response.setHeader("P3P", "CP=\"CAO IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");

但是,正如您在所有响应中所需要的那样,更好地编写类似

的过滤器
public class P3PFilter implements Filter {

    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse resp = (HttpServletResponse) res;
        resp.addHeader("p3p", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
        filterChain.doFilter(req, resp);
    }

    public void init(FilterConfig arg0) throws ServletException {
    }
}

并对所有请求应用过滤器。

<filter>
    <filter-name>P3P Filter</filter-name>
    <filter-class>your.package.P3PFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>P3P Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

答案 1 :(得分:0)

这可能会有所帮助,请尝试使用以下方法修改代码:

response.setHeader("P3P","CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'");

还看看这个:

https://msdn.microsoft.com/en-us/library/ms537343(v=vs.85).aspx#unsatisfactory_cookies

答案 2 :(得分:0)

基本上就像这里写过滤器一样 http://www.muneebahmad.com/index.php/archives/56 并使用

response.addHeader("P3P", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi
CONi HIS OUR IND CNT\"");

然后只需将其映射到您要添加此标题的网址,或使用 / *

在这里,你会发现几乎相似的问题,并接受相同的详细示例代码答案。

https://stackoverflow.com/questions/6121212/how-to-generate-and-deploy-p3p-privacy-policy-in-struts2-java

希望它会有所帮助。!!