使用WildFly 8.2.0.Final,Primefaces 5.1和MySQL 5的JDBC领域和基于表单的身份验证
我會不時查看我博客上最受歡迎的內容,并盡力滿足您的最佳需求。 因此,閱讀我的博客是其他讀者推動內容的一種方式。 另一種方法是通過評論或電子郵件與我聯系。 今天,我將使用Primefaces修改我的JDBC Realm示例并將其更新到最新的WildFly服務器。
準備工作
第一步是將最新的WildFly 8.2.0.Final下載并解壓縮(我使用的是Java EE7完整版和網絡版)到您選擇的位置。 還要確保已安裝,啟動并正在運行MySQL Community Server(5.6.22) 。 我將使用NetBeans 8.0.2,因為版本號恰好適合WildFly :)并且您還應該下載最新的MySQL Connector / J (5.1.34)。
一些基礎
WildFly 8.x使用PicketBox和JAAS的組合作為WildFly客戶端和服務器安全機制。 所謂的“安全子系統”完全涵蓋了該配置。 安全子系統通過使用與當前請求關聯的安全上下文進行操作,然后此安全上下文向相關容器提供來自已配置安全域的許多功能,所公開的功能是身份驗證管理器,授權管理器,審計管理器和一個映射管理器。 可以在WildFly文檔中找到更多詳細信息。 好消息是,您不必一次深入研究所有細節,因為我專注于配置的一個元素,而這正是部署特定配置所必需的。 這些是安全域 。 需要在任何相關的服務器配置文件(standalone.xml / standalone-full.xml /等)中進行配置。 默認情況下,配置了“其他”,“ jboss-ejb-policy”和“ jboss-web-policy”安全域。 請注意,這與您的應用程序完全相關,我將在一分鐘內研究一下配置。 如果您正在尋找一種保護其他接口的方法,則需要研究如何保護管理接口 。 我最近有一篇關于如何使用undertow設置ssl / tls的博客文章。
添加用戶
由于我將大量使用admin-console,請確保首先將admin-user添加到管理領域。 %JBOSS_HOME%/ bin / add-user.sh | .bat將指導您完成此操作。
WildFly和MySQL
要在應用程序中使用數據庫持久化的用戶名/密碼/角色進行身份驗證和授權,首先需要的是數據庫。 并且這需要在WildFly中進行部署和配置。 有兩種安裝兼容JDBC4的驅動程序的方法:將其部署為任何其他應用程序包,或將其安裝為模塊。 任何兼容JDBC 4的驅動程序都將通過名稱和版本自動識別并安裝到系統中。 對于不兼容的驅動程序,請參閱WildFly文檔 。
從存檔中提取mysql-connector-java-5.1.34-bin.jar并轉到WildFly管理控制臺,然后選擇“部署”并按“添加”按鈕。 現在選擇jar并在最后一個向導步驟中啟用它。 現在切換到“配置”>“連接器”>“數據源”,然后按“添加”按鈕。 輸入名稱(“ UserDS”)和JNDI名稱(“ java:jboss / datasources / UserDS”。在下一頁上,選擇檢測到的驅動程序“ mysql-connector-java-5.1.34-bin.jar_com.mysql.jdbc” .Driver_5_1”,并在最后一步中,您需要配置實例的連接URL,用戶和密碼。在我的情況下,架構名稱為“ wildfly”,連接URL為“ jdbc:mysql:// localhost:3306 / wildfly ”。
成功測試連接后,繼續并啟用它。 現在,您可以配置其余的了。
準備數據庫
在我進一步研究安全域配置之前,數據庫需要一些表供我們使用。 至少,這些用戶應該能夠保留登錄名,密碼和角色。 但是,我將在這里使用的數據庫登錄模塊非常靈活,它允許您配置一個SQL查詢以返回那些。 這意味著,您可以重復使用包含各種與用戶相關的信息的相同應用程序用戶數據庫,只需為登錄模塊指定所需的SQL以返回正確的信息即可。 在此示例中,它將是一個非常簡單的設置,其中包含兩個表,這些表恰好包含數據庫登錄模塊所需的最少信息。
這里要明確:這是一個非常簡單的示例。 它在數據庫級別上不包含很多檢查,并且是您可能擁有的最簡單的模型。 如果不添加一些外鍵和進一步的約束,我就不會在生產中使用它。
下一步,至少要有一個用戶填寫表格以進行測試。 為此,我們需要確定應使用的MessageDigest算法。 網絡上有許多樣本試圖暗示MD5是加密任何內容的可行方法。 這不是真的。 它必須至少為SHA-256或更高。 JDK 8引入了SHA-512,但似乎不適用于此版本的WildFly,因此我將其退回到SHA-256。 因此,在添加用戶之前,我們需要一種使用SHA-256加密密碼的方法。 值得慶幸的是,PicketBox中有一個不錯的小工具,您可以通過命令行使用它:
java -cp %JBOSS_HOME%\modules\system\layers\base\org\picketbox\main\picketbox-4.0.21.Final.jar org.jboss.security.Base64Encoder <password> <MessageDigest>輸出是base64編碼的密碼。 對于帶有MessageDigest“ SHA-256”的密碼“ admin”,它是:jGl25bVBBBW96Qi9Te4V37Fnqchz / Eu4qB9vKrRIqRg =
現在是時候對數據庫進行一些插入了:
INSERT INTO `wildfly`.`user` (`username`, `passwd`) VALUES ('myfear', 'jGl25bVBBBW96Qi9Te4V37Fnqchz/Eu4qB9vKrRIqRg=');INSERT INTO `wildfly`.`userroles` (`unsername`, `role`) VALUES ('myfear', 'ADMIN');這是WildFly的最后一步。 返回服務器配置,然后轉到示例應用程序。
在WildFly中配置安全域
確保您的WildFly實例已關閉,并打開配置xml(例如standalone.xml)進行編輯。 現在找到<security-domains>標記,并向其添加一個新的安全域:
<security-domain name="secureDomain" cache-type="default"><authentication><login-module code="Database" flag="required"><module-option name="dsJndiName" value="java:jboss/datasources/UserDS"/><module-option name="principalsQuery" value="select passwd from Users where username=?"/><module-option name="rolesQuery" value="select role, 'Roles' from UserRoles where username=?"/><module-option name="hashAlgorithm" value="SHA-256"/><module-option name="hashEncoding" value="base64"/></login-module></authentication></security-domain>啟動您的實例,然后很快查看是否一切正常。 轉到我的GitHub帳戶上的SimpleJDBCRealmWildFly ,然后在NetBeans中打開它。
調整Web應用程序
您會注意到,在此Web應用程序中沒有很多要看的東西。 它在網頁文件夾中包含兩個不同的文件夾:“ admin”和“ users”。 “ admin”文件夾應受到保護,這是通過在web.xml中添加相關的<security-constraint>來完成的。 <auth-contraint>是角色名稱“ admin”。 比較完整的web.xml以獲取詳細信息,如果有疑問,請確保與我較早的帖子中有關所有內容的詳細工作方式進行核對。 唯一仍然開放的是如何將部署鏈接到安全域“ secureDomain”。 這是在jboss-web.xml描述符中完成的。
<jboss-web><security-domain>secureDomain</security-domain> </jboss-web>這就是開始它所需要的所有魔術。 如果現在嘗試訪問示例應用程序的“管理”部分,則系統會提示您登錄表單。
角色組映射呢?
這是一個非常簡單的示例,我決定不添加角色組映射。 實際上,此通用概念允許將開發人員角色從生產中的管理/操作角色中進一步抽象出來。 有一些方法可以實際執行此操作。 我將在后面詳細介紹如何添加它。 到目前為止,請確保對web.xml中的<role-name>元素和用戶的數據庫角色條目使用相同的大小寫。 在此示例中,兩者均以大寫字母“ ADMIN”書寫。
故障排除技巧
你會遇到麻煩的。 因為許多的原因。 緩存是一個。 如果您確實在數據庫中更改了角色名稱,并且您已經對用戶進行了身份驗證,則很可能看不到更新。 您可以從安全域定義中刪除cache-type =“ default”屬性,并使用no-cache運行。
錯誤消息也是另一個有用的信息。 出于安全原因,在INFO模式下記錄的內容很少。 確保添加安全記錄器并將日志子系統中控制臺記錄器的日志級別更改為TRACE:
<logger category="org.jboss.security"><level name="TRACE"/></logger>您最喜歡的瀏覽器的“隱身功能”更加有用。 這將阻止您再次使用相同的憑據運行,而您要做的就是使用其他帳戶。 但這也可以通過注銷輕松解決。 但這是下一篇文章的另一個重要主題。
翻譯自: https://www.javacodegeeks.com/2015/02/jdbc-realm-and-form-based-authentication-with-wildfly-8-2-0-final-primefaces-5-1-and-mysql-5.html
總結
以上是生活随笔為你收集整理的使用WildFly 8.2.0.Final,Primefaces 5.1和MySQL 5的JDBC领域和基于表单的身份验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos攻击(ddos如何查找攻击源)
- 下一篇: 仙剑1安卓版(仙剑1安卓)