以下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。
答案 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.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\"");
然后只需将其映射到您要添加此标题的网址,或使用 / * 。
或强>
在这里,你会发现几乎相似的问题,并接受相同的详细示例代码答案。
希望它会有所帮助。!!