簡體   English   中英

確保用戶在Java Web App中得到認證

[英]Ensuring Users are Authenticated in Java Web App

我的Web應用程序有一個安全區域,用戶可以通過JSP登錄該區域。 JSP將用戶名和密碼發布到Servlet,然后該Servlet檢查用戶憑據是否有效。 如果它們有效,則將用戶定向到安全資源。 如何確保用戶不先驗證就不能導航到安全資源?

一種常見的方法是在用戶會話中設置令牌,即

session.setAttribute("loggedIn", "true");

甚至

session.setAttribute("loggedInUser", "someUserName");

並檢查所有應保護頁面的安全性。 一個好的策略是使用附加到要保護的任何頁面的servlet過濾器執行檢查。 如果他們沒有通過檢查,則過濾器可以重定向到登錄頁面。 另請參見此處: http : //java.sun.com/products/servlet/Filters.html

這也是一篇有關使用過濾器進行身份驗證的好文章: http : //www.developer.com/java/ent/article.php/3467801

在web.xml中使用安全約束的結果是什么:

<security-constraint>
      <web-resource-collection>
         <web-resource-name>Secure</web-resource-name>
         <url-pattern>/secure/*</url-pattern>
      </web-resource-collection>

確保人們總是通過單個servlet訪問您的應用程序,其中servlet將請求分派給JSP,並將結果返回給瀏覽器。 這樣,您將始終可以控制發生的事情,因為只有一個入口點。

另一種方法是擁有一個會話變量(服務器端,甚至在cookie中),每個需要認證的JSP都會檢查該變量。

安全真的很難實現。 比您通常認為的要多得多。 必須使用框架(想到Acegi )或LenW指出的web.xml的標准“”部分! 至少使用過濾器來處理安全性的授權部分。

我真的不喜歡使用單入口點的解決方案(如Rolf建議 )。 在我看來,這就像對您的體系結構施加了人為約束。 並且有很多充分的理由在一個webapp中擁有多個servlet。

無論您做什么,都不要使用依賴於每個頁面上的手動代碼的技術(例如:每個以“ if user_authentified ...”開頭的JSP)。 你會忘記把它放在某個地方...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM