2011-05-11 81 views
1

在我的項目中,我使用SSL,但它適用於所有頁面。我只想將它用於登錄頁面,在該頁面之後它應該恢復爲HTTP協議。我怎樣才能做到這一點?我發現了一種方法,但它不起作用。如何強制只使用SSL打開一個頁面?

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Notify page, accessed internally by application</web-resource-name> 
     <url-pattern>/Login.xhtml</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Entire Site</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>NONE</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

我的項目是一個JSF 2.0的項目,我使用Eclipse赫利俄斯和Tomcat 7.0。

謝謝。

回答

1

這是不可能的。當會話由HTTPS請求創建時,它不可用於HTTP請求。您最好的選擇是在登錄時自己創建一個非安全的cookie,並通過它來維護登錄。

Map<String, Object> properties = new HashMap<String, Object>(); 
properties.put("secure", false); 
externalContext.addResponseCookie(name, value, properties); 

但想到再次這一點,什麼是HTTPS登錄點呢?如果您在HTTPS之後返回HTTP並且想要讓用戶保持登錄狀態,那麼您需要將會話Cookie設置爲不安全。通過這種方式,黑客仍然可以嗅探cookie中的會話ID來執行session fixation黑客攻擊。通過HTTPS登錄,您只能防止黑客瞭解實際的用戶名/密碼,但一旦黑客在cookie中指定會話ID,就沒有意義了。

我會說,忘記開關並在登錄後一直堅持使用HTTPS。

+0

感謝您的有用答案。我想在登錄後切換HTTP和HTTPS,因爲我使用Primefaces及其某些組件(例如文件上載器)在HTTPS時發生錯誤。我不知道爲什麼,但它正在發生,爲此我只想將SSL設置爲登錄頁面。如果你可以幫助Primefaces的錯誤,當然這會很好。 – amrXX 2011-05-11 16:16:06

+0

問一個新問題或者向PrimeFaces報告此問題。 – BalusC 2011-05-11 16:27:52

相關問題