2009-11-19 23 views
2

我正在研究一個僅限Intranet的Web應用程序(J2EE),它需要一些基本的安全功能。該網站的授權用戶相對較少,但我仍需要實施某種安全會話。尋找一個簡單,安全的會話設計,使用servlet和JSP

我正在查看的基本流程是訪問站點=>登錄=>使用站點=>完成時註銷(或在瀏覽器關閉時自動註銷)。沒有什麼奇特的東西,登錄時甚至沒有「記住我」選項。大多數身份驗證工作已經完成 - 只能通過https訪問站點,並且我有一個存儲用戶名和(加密)密碼的數據庫。

因此,一旦用戶登錄,什麼是最簡單的(理想情況下沒有任何JBoss/JSP會在幕後執行cookies)實現安全會話的方式? I.E.防止用戶直接請求登錄屏幕之外的頁面等。

是否只是檢查會話中某些「isUserAuthenticated」類型的值,檢查會話是否存在(例如request.getSession(false))我的servlet?如何防止用戶獲取JSP文件並強制他們爲所有請求使用servlet?任何其他考慮(及其解決方案)?

+0

對於第一部分,您可能需要檢查http:// stackoverflow。com/questions/348090/ensure-users-are-authenticated-in-java-web-app – 2009-11-19 18:12:02

+0

這絕對是我想到的那種類型。並不是說它很優雅(我猜我只是在每個頁面請求中檢查這個值),但它看起來非常小。 – 2009-11-19 18:19:01

+0

我在評論中提到了你的問題 - 請看看。雖然顯然你可以選擇如何實現這一點,但請記住,雖然「正確的方式」涉及到一些學習曲線,但最終它實際上更容易和簡單(我們的字面意思是可能是15-20 XML的行;就是這樣)。 – ChssPly76 2009-11-19 18:28:57

回答

6

聽起來像你可以使用簡單的聲明式安全方法。

看一看的Java EE教程節Securing Web Applications,尤其是在declarative security部分

爲了解決您的具體問題:

什麼是最簡單的...的方式來實現 安全會話? I.E. 防止用戶只需直接 超出登錄 屏幕請求頁面等

與適當的安全角色聲明你的web應用程序中的描述符(web.xml)的URL。他們將無法訪問未經授權的用戶(並試圖訪問他們將帶來一個登錄頁面)。

這是否只是一種檢查 會議上對一些 的事「isUserAuthenticated」般的價值, 檢查存在會話(如 request.getSession(假))在我的servlet所有 傳入的請求?

所有這些將是完全不必要的; servlet容器會在幕後爲你做。

怎麼樣防止用戶 越來越JSP文件,並迫使他們到 使用servlet的所有請求?

只要JSP中永遠需要公開訪問的(例如,你從你的servlet中轉發給他們,你永遠重定向到JSP),您可以用安全的集合在申報網址從未真正分配給用戶的角色。

+0

+1爲好的答案,並更快:) – 2009-11-19 18:13:56

+0

我已經看過使用DD的安全性之前,它似乎是矯枉過正。我真的沒有多重安全角色或類似的東西;只是有效(或無效)的用戶名/密碼組合。使用聲明性安全性,我(作爲Java程序員)如何通知服務器特定的用戶名/密碼對於特定的登錄嘗試是否有效?該教程還提到「創建基於表單的登錄時,請務必使用cookie或SSL會話信息來維護會話」,這正是我試圖避免的。 – 2009-11-19 18:14:04

+0

您不必擁有多個角色,其中一個就足夠了(如果您想限制JSP,則需要兩個角色)。如何確定用戶/密碼是否有效是特定於容器的;對於Tomcat,您可以通過指定領域(http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html#JDBCRealm)或編寫自己的領域來實現。我不確定你的意思是「避免cookie」 - 會話必須以某種方式維護(容器涉及cookie,而不是你)。如果cookie不可接受,您可以使用url重寫(詳細信息請參見教程鏈接) – ChssPly76 2009-11-19 18:25:23