使用LDAP保护Java EE6中的Web应用程序
在上一篇文章中,我們解釋了如何在通過傳輸層安全性(TLS)/安全套接字層(SSL)傳輸數據時保護數據。 現在,讓我們嘗試了解如何為使用LDAP服務器進行身份驗證的基于JEE 6的Web應用程序應用安全機制。
目的:
?在JEE應用服務器中配置LDAP領域
?將JEE安全性應用于示例Web應用程序。
使用的產品:
- IDE:Netbeans 7.2
- Java開發套件(JDK):版本6
- Glassfish服務器:3.1
- 身份驗證機制:基于表單的身份驗證
- 驗證服務器:LDAP OpenDS v2.2
將JEE安全性應用于示例Web應用程序:
可以通過聲明性安全性或程序性安全性來保護JEE Web應用程序。
聲明式安全性可以通過使用批注或通過部署描述符在JEE應用程序中實現。 如果角色和身份驗證過程很簡單,并且可以利用現有的安全提供程序(甚至包括LDAP,Kerberos之類的外部安全提供程序),則使用這種類型的安全性機制。
當聲明性安全對于上下文中的應用程序來說不夠時, 程序安全性提供了附加的安全性機制。 當我們需要定制的安全性并需要豐富的角色集時,需要使用它。
在Glassfish應用程序服務器中配置領域
在我們在Glassfish應用程序服務器中配置領域之前,您需要安裝和配置將用于項目的LDAP服務器。 您可以在以下文章中獲得完整的說明:“ 如何安裝和配置LDAP服務器 ”。
安裝成功后,啟動您的Glassfish服務器,然后轉到管理控制臺。 創建一個新的LDAP領域。
創建新的LDAP領域
根據為LDAP服務器完成的配置添加配置設置。
Glassfish Web應用程序LDAP領域
JAAS上下文–標識符,將在應用程序模塊中用于與LDAP服務器連接。 (例如ldapRealm)
目錄– LDAP服務器URL路徑(例如ldap:// localhost:389)
基本DN:LDAP目錄中的專有名稱,用于標識用戶數據的位置。 將JEE安全性應用于Web應用程序 按照以下結構創建示例Web應用程序:
SampleWebApp目錄
基于表單的身份驗證機制將用于用戶身份驗證。
JEE登錄和身份驗證
讓我們借助上圖和代碼來解釋整個過程。
在Netbeans IDE中設置一個示例Web應用程序。
Netbeans IDE中的SampleWebApp
SampleWebApp配置
步驟1:
如上圖所示,客戶端瀏覽器嘗試從http:// {samplewebsite.com} / {contextroot} /index.jsp網站請求受保護的資源。 Web服務器進入Web配置文件,并確定請求的資源受到保護。
web.xml
<security-constraint><display-name>SecurityConstraint</display-name><web-resource-collection><web-resource-name>Secured resources</web-resource-name><url-pattern>/*</url-pattern></web-resource-collection><auth-constraint><role-name>GeneralUser</role-name><role-name>Administrator</role-name></auth-constraint><user-data-constraint><transport-guarantee>NONE</transport-guarantee></user-data-constraint> </security-constraint>第2步:
Web服務器將Login.jsp作為基于表單的身份驗證機制的一部分提供給客戶端。 這些配置是從Web配置文件中檢查的。
web.xml
<login-config><auth-method>FORM</auth-method><realm-name>ldapRealm</realm-name><form-login-config><form-login-page>/Login.jsp</form-login-page><form-error-page>/LoginError.jsp</form-error-page></form-login-config> </login-config>第三步:
客戶端將登錄表單提交到Web服務器。 當服務器發現表單操作為“ j_security_check”時,它將處理請求以對客戶端的憑據進行身份驗證。 jsp表單必須包含登錄元素j_username和j_password,這將允許Web服務器調用登錄身份驗證機制。
Login.jsp
<form action="j_security_check" method=post><p>username: <input type="text" name="j_username"></p><p>password: <input type="password" name="j_password"></p><input type="submit" value="submit"><input type="reset" value="Reset"> </form>由于在登錄配置中使用了LDAP領域,因此在處理請求時,Web服務器會將身份驗證請求發送到LDAP服務器。 LDAP服務器將根據LDAP存儲庫中存儲的用戶名和密碼對用戶進行身份驗證。
第四步:
如果身份驗證成功,則將安全資源(在本例中為index.jsp)返回給客戶端,并且容器使用會話ID來標識客戶端的登錄會話。 容器使用包含會話ID的cookie維護登錄會話。 服務器將此Cookie發送回客戶端,只要客戶端能夠為后續請求顯示此cookie,那么容器就可以輕松識別客戶端,從而維護該客戶端的會話。
步驟5:
僅當認證失敗時,才會按照web.xml中的配置將用戶重定向到LoginError.jsp。
<form-error-page>/LoginError.jsp</form-error-page>這顯示了如何將基于表單的安全認證應用于示例Web應用程序。 現在,讓我們簡要了解一下用于該項目的安全資源。 在該項目中,受保護的資源是index.jsp,它接受用戶名并將請求轉發到LoginServlet。 登錄Servlet將請求分派到Success.jsp,然后將用戶名打印到客戶端。
index.jsp
<body><h2>Please type your name</h2><form method="POST" action="LoginServlet"><input type="text" name="username" size="25"><p></p><input type="submit" value="Submit"><input type="reset" value="Reset"></form></body>LoginServlet.java
protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();try {RequestDispatcher requestDispatcher = getServletConfig().getServletContext().getRequestDispatcher("/Success.jsp");requestDispatcher.forward(request, response);} finally {out.close();}}Success.jsp
<body><h1>You have been successfully logged in as ${param.username}</h1> </body>Web.xml
<servlet><servlet-name>LoginServlet</servlet-name><servlet-class>com.login.LoginServlet</servlet-class></servlet><servlet-mapping><servlet-name>LoginServlet</servlet-name><url-pattern>/LoginServlet</url-pattern></servlet-mapping>您可以從以下鏈接下載完整的工作代碼:
- SampleWebApp代碼下載
翻譯自: https://www.javacodegeeks.com/2013/05/secure-web-application-in-java-ee6-using-ldap.html
總結
以上是生活随笔為你收集整理的使用LDAP保护Java EE6中的Web应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PC电脑版怎么玩如何打开电脑的运行
- 下一篇: JBoss AS 8中的Java EE