繁体   English   中英

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

[英]P3P set header for IE8 doesn't seem to work

下面的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。

首先简短的回答:)

您可以简单地添加标题为

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被阻止/未保存在Internet Explorer的IFRAME中

P3P策略无法在IE中允许第三方Cookie

尽管有所有这些,但我仍然无法使其正常运行。 我未能意识到的是,最终我在这本惊人的书的帮助下学到了

为了为Internet Explorer用户设置第三方cookie(具有默认的安全设置),您需要使用资源返回一个特殊的P3P HTTP标头,该标头声明您的服务打算如何使用用户数据。 该标头需要与您的资源的所有 HTTP响应一起返回,而不仅仅是设置cookie的资源。 这意味着一切都是静态资源,AJAX端点,iframe。

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

正如Techrepublic博客中所述,我将没有URL的标头设置为p3p策略

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>

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

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

基本上,只需在此处编写过滤器即可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

希望对你有帮助!!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM