我在我的JSF應用程序中設置了基於表單的認證。我已經使用JDBC領域進行了運行,並已將/ admin/*區域鎖定到「admin」組中的那些區域。一切似乎都按預期工作,我可以登錄並瀏覽管理部分,並且我的會話始終處於活動狀態。但是,只要我導航到管理部分之外的頁面,應用程序就會將用戶記錄下來並使會話無效。用戶會話中的任何內容都會丟失。我需要應用程序來保持用戶登錄,直到他們手動註銷或會話過期。我能做些什麼來解決這個問題?如果有問題,我正在使用Glassfish。謝謝!Java EE表單認證在離開認證區域後使會話無效
重申我的困境......在我的應用程序中,我的會話範圍bean在頁面之間導航時保持活動狀態,然後使用java的表單身份驗證登錄到安全管理區域,並且會話仍保持活動狀態;然後我在管理部分和會話中的頁面之間瀏覽,再次保持活動狀態;然後我離開管理區域,然後會話失效並結束,用戶註銷。我的想法是必須成爲Web容器安全機制的問題,因爲我沒有告訴它註銷或使會話無效。所以具體而言,我需要回答的第一個問題是:這是Java基於表單的身份驗證的正常行爲,在離開「不安全」區域(即未指定爲需要身份驗證的URL)時註銷並使會話無效?
我的web.xml文件包括以下行:
<security-constraint>
<display-name>Admin Section</display-name>
<web-resource-collection>
<web-resource-name>Admin Section</web-resource-name>
<description/>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>admin</role-name>
</auth-constraint>
<user-data-constraint>
<description/>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<realm-name>sqlRealm</realm-name>
<form-login-config>
<form-login-page>/login.xhtml</form-login-page>
<form-error-page>/login.xhtml?error=true</form-error-page>
</form-login-config>
</login-config>
<security-role>
<description/>
<role-name>admin</role-name>
</security-role>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
您聲明:_「**應用程序**正在將用戶註銷並使會話失效。」_這是您的代碼,因此您應該修復此問題 – Kukeltje
此問題相當廣泛。您可以輕鬆調查並排除自己。首先,您對HTTP會話和Cookie如何在封面下工作有一個最基本的瞭解嗎?例如,您確實知道HTTP cookie與特定的scheme/host/port/path綁定,並且不會在另一個上提供?所以例如當您從HTTPS導航到HTTP時,HTTPS期間創建的Cookie在HTTP中不可用?這不是特別針對JSF/JavaEE,而是針對基本的HTTP。 – BalusC
@Kukeltje我沒有寫java的認證模塊,所以它不是我的代碼。我問什麼我的代碼*應該*是解決它。感謝您的幫助,寶貴的意見! – Matt