2015-02-11 65 views
2

setHeader代碼存在於我的CASresponse JSP,但似乎並沒有工作,P3P設置頭似乎不起作用以下P3P

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

您可以嘗試創建一個新過濾器,並將其設置爲過濾器鏈中的第一個過濾器,在其中添加P3P標頭,因爲@NaMaN表示 – 2015-02-20 13:15:46

回答

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政策是什麼以及如何使用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/

值得注意的SO問題

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 標題,該資源聲明​​您的服務打算如何使用用戶數據 。此標題需要返回全部 HTTP 對您資源的迴應,而不僅僅是那些設置cookie。這 意味着靜態資源,AJAX端點,iframes的一切。

我懷疑這也可能是您的問題,我使用的P3P策略與您的策略幾乎完全相同,因此您不會因無效策略而被拒絕。

我把我的頭沒有一個URL的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> 
+0

將嘗試此並讓您知道:) – 2015-02-15 18:59:02

+0

這對於IE 11也在iFrame中! – 2016-02-04 17:22:29

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\""); 

然後只是將其映射到您希望添加此標頭的URL或使用/*

OR

在這裏,你會發現幾乎類似的問題,並與細節的示例代碼相同的接受的答案。

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

希望這將有助於。!