日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

使用WildFly 8.2.0.Final,Primefaces 5.1和MySQL 5的JDBC领域和基于表单的身份验证

發(fā)布時(shí)間:2023/12/3 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用WildFly 8.2.0.Final,Primefaces 5.1和MySQL 5的JDBC领域和基于表单的身份验证 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我會(huì)不時(shí)查看我博客上最受歡迎的內(nèi)容,并盡力滿(mǎn)足您的最佳需求。 因此,閱讀我的博客是其他讀者推動(dòng)內(nèi)容的一種方式。 另一種方法是通過(guò)評(píng)論或電子郵件與我聯(lián)系。 今天,我將使用Primefaces修改我的JDBC Realm示例并將其更新到最新的WildFly服務(wù)器。

準(zhǔn)備工作

第一步是將最新的WildFly 8.2.0.Final下載并解壓縮(我使用的是Java EE7完整版和網(wǎng)絡(luò)版)到您選擇的位置。 還要確保已安裝,啟動(dòng)并正在運(yùn)行MySQL Community Server(5.6.22) 。 我將使用NetBeans 8.0.2,因?yàn)榘姹咎?hào)恰好適合WildFly :)并且您還應(yīng)該下載最新的MySQL Connector / J (5.1.34)。

一些基礎(chǔ)

WildFly 8.x使用PicketBox和JAAS的組合作為WildFly客戶(hù)端和服務(wù)器安全機(jī)制。 所謂的“安全子系統(tǒng)”完全涵蓋了該配置。 安全子系統(tǒng)通過(guò)使用與當(dāng)前請(qǐng)求關(guān)聯(lián)的安全上下文進(jìn)行操作,然后此安全上下文向相關(guān)容器提供來(lái)自已配置安全域的許多功能,所公開(kāi)的功能是身份驗(yàn)證管理器,授權(quán)管理器,審計(jì)管理器和一個(gè)映射管理器。 可以在WildFly文檔中找到更多詳細(xì)信息。 好消息是,您不必一次深入研究所有細(xì)節(jié),因?yàn)槲覍?zhuān)注于配置的一個(gè)元素,而這正是部署特定配置所必需的。 這些是安全域 。 需要在任何相關(guān)的服務(wù)器配置文件(standalone.xml / standalone-full.xml /等)中進(jìn)行配置。 默認(rèn)情況下,配置了“其他”,“ jboss-ejb-policy”和“ jboss-web-policy”安全域。 請(qǐng)注意,這與您的應(yīng)用程序完全相關(guān),我將在一分鐘內(nèi)研究一下配置。 如果您正在尋找一種保護(hù)其他接口的方法,則需要研究如何保護(hù)管理接口 。 我最近有一篇關(guān)于如何使用undertow設(shè)置ssl / tls的博客文章。

添加用戶(hù)

由于我將大量使用admin-console,請(qǐng)確保首先將admin-user添加到管理領(lǐng)域。 %JBOSS_HOME%/ bin / add-user.sh | .bat將指導(dǎo)您完成此操作。

WildFly和MySQL

要在應(yīng)用程序中使用數(shù)據(jù)庫(kù)持久化的用戶(hù)名/密碼/角色進(jìn)行身份驗(yàn)證和授權(quán),首先需要的是數(shù)據(jù)庫(kù)。 并且這需要在WildFly中進(jìn)行部署和配置。 有兩種安裝兼容JDBC4的驅(qū)動(dòng)程序的方法:將其部署為任何其他應(yīng)用程序包,或?qū)⑵浒惭b為模塊。 任何兼容JDBC 4的驅(qū)動(dòng)程序都將通過(guò)名稱(chēng)和版本自動(dòng)識(shí)別并安裝到系統(tǒng)中。 對(duì)于不兼容的驅(qū)動(dòng)程序,請(qǐng)參閱WildFly文檔 。

從存檔中提取mysql-connector-java-5.1.34-bin.jar并轉(zhuǎn)到WildFly管理控制臺(tái),然后選擇“部署”并按“添加”按鈕。 現(xiàn)在選擇jar并在最后一個(gè)向?qū)Р襟E中啟用它。 現(xiàn)在切換到“配置”>“連接器”>“數(shù)據(jù)源”,然后按“添加”按鈕。 輸入名稱(chēng)(“ UserDS”)和JNDI名稱(chēng)(“ java:jboss / datasources / UserDS”。在下一頁(yè)上,選擇檢測(cè)到的驅(qū)動(dòng)程序“ mysql-connector-java-5.1.34-bin.jar_com.mysql.jdbc” .Driver_5_1”,并在最后一步中,您需要配置實(shí)例的連接URL,用戶(hù)和密碼。在我的情況下,架構(gòu)名稱(chēng)為“ wildfly”,連接URL為“ jdbc:mysql:// localhost:3306 / wildfly ”。

成功測(cè)試連接后,繼續(xù)并啟用它。 現(xiàn)在,您可以配置其余的了。

準(zhǔn)備數(shù)據(jù)庫(kù)

在我進(jìn)一步研究安全域配置之前,數(shù)據(jù)庫(kù)需要一些表供我們使用。 至少,這些用戶(hù)應(yīng)該能夠保留登錄名,密碼和角色。 但是,我將在這里使用的數(shù)據(jù)庫(kù)登錄模塊非常靈活,它允許您配置一個(gè)SQL查詢(xún)以返回那些。 這意味著,您可以重復(fù)使用包含各種與用戶(hù)相關(guān)的信息的相同應(yīng)用程序用戶(hù)數(shù)據(jù)庫(kù),只需為登錄模塊指定所需的SQL以返回正確的信息即可。 在此示例中,它將是一個(gè)非常簡(jiǎn)單的設(shè)置,其中包含兩個(gè)表,這些表恰好包含數(shù)據(jù)庫(kù)登錄模塊所需的最少信息。

CREATE TABLE Users(username VARCHAR(255) PRIMARY KEY, passwd VARCHAR(255)) CREATE TABLE UserRoles(username VARCHAR(255), role VARCHAR(32))

這里要明確:這是一個(gè)非常簡(jiǎn)單的示例。 它在數(shù)據(jù)庫(kù)級(jí)別上不包含很多檢查,并且是您可能擁有的最簡(jiǎn)單的模型。 如果不添加一些外鍵和進(jìn)一步的約束,我就不會(huì)在生產(chǎn)中使用它。

下一步,至少要有一個(gè)用戶(hù)填寫(xiě)表格以進(jìn)行測(cè)試。 為此,我們需要確定應(yīng)使用的MessageDigest算法。 網(wǎng)絡(luò)上有許多樣本試圖暗示MD5是加密任何內(nèi)容的可行方法。 這不是真的。 它必須至少為SHA-256或更高。 JDK 8引入了SHA-512,但似乎不適用于此版本的WildFly,因此我將其退回到SHA-256。 因此,在添加用戶(hù)之前,我們需要一種使用SHA-256加密密碼的方法。 值得慶幸的是,PicketBox中有一個(gè)不錯(cuò)的小工具,您可以通過(guò)命令行使用它:

java -cp %JBOSS_HOME%\modules\system\layers\base\org\picketbox\main\picketbox-4.0.21.Final.jar org.jboss.security.Base64Encoder <password> <MessageDigest>

輸出是base64編碼的密碼。 對(duì)于帶有MessageDigest“ SHA-256”的密碼“ admin”,它是:jGl25bVBBBW96Qi9Te4V37Fnqchz / Eu4qB9vKrRIqRg =

現(xiàn)在是時(shí)候?qū)?shù)據(jù)庫(kù)進(jìn)行一些插入了:

INSERT INTO `wildfly`.`user` (`username`, `passwd`) VALUES ('myfear', 'jGl25bVBBBW96Qi9Te4V37Fnqchz/Eu4qB9vKrRIqRg=');INSERT INTO `wildfly`.`userroles` (`unsername`, `role`) VALUES ('myfear', 'ADMIN');

這是WildFly的最后一步。 返回服務(wù)器配置,然后轉(zhuǎn)到示例應(yīng)用程序。

在WildFly中配置安全域

確保您的WildFly實(shí)例已關(guān)閉,并打開(kāi)配置xml(例如standalone.xml)進(jìn)行編輯。 現(xiàn)在找到<security-domains>標(biāo)記,并向其添加一個(gè)新的安全域:

<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>

啟動(dòng)您的實(shí)例,然后很快查看是否一切正常。 轉(zhuǎn)到我的GitHub帳戶(hù)上的SimpleJDBCRealmWildFly ,然后在NetBeans中打開(kāi)它。

調(diào)整Web應(yīng)用程序

您會(huì)注意到,在此Web應(yīng)用程序中沒(méi)有很多要看的東西。 它在網(wǎng)頁(yè)文件夾中包含兩個(gè)不同的文件夾:“ admin”和“ users”。 “ admin”文件夾應(yīng)受到保護(hù),這是通過(guò)在web.xml中添加相關(guān)的<security-constraint>來(lái)完成的。 <auth-contraint>是角色名稱(chēng)“ admin”。 比較完整的web.xml以獲取詳細(xì)信息,如果有疑問(wèn),請(qǐng)確保與我較早的帖子中有關(guān)所有內(nèi)容的詳細(xì)工作方式進(jìn)行核對(duì)。 唯一仍然開(kāi)放的是如何將部署鏈接到安全域“ secureDomain”。 這是在jboss-web.xml描述符中完成的。

<jboss-web><security-domain>secureDomain</security-domain> </jboss-web>

這就是開(kāi)始它所需要的所有魔術(shù)。 如果現(xiàn)在嘗試訪問(wèn)示例應(yīng)用程序的“管理”部分,則系統(tǒng)會(huì)提示您登錄表單。

角色組映射呢?

這是一個(gè)非常簡(jiǎn)單的示例,我決定不添加角色組映射。 實(shí)際上,此通用概念允許將開(kāi)發(fā)人員角色從生產(chǎn)中的管理/操作角色中進(jìn)一步抽象出來(lái)。 有一些方法可以實(shí)際執(zhí)行此操作。 我將在后面詳細(xì)介紹如何添加它。 到目前為止,請(qǐng)確保對(duì)web.xml中的<role-name>元素和用戶(hù)的數(shù)據(jù)庫(kù)角色條目使用相同的大小寫(xiě)。 在此示例中,兩者均以大寫(xiě)字母“ ADMIN”書(shū)寫(xiě)。

故障排除技巧

你會(huì)遇到麻煩的。 因?yàn)樵S多的原因。 緩存是一個(gè)。 如果您確實(shí)在數(shù)據(jù)庫(kù)中更改了角色名稱(chēng),并且您已經(jīng)對(duì)用戶(hù)進(jìn)行了身份驗(yàn)證,則很可能看不到更新。 您可以從安全域定義中刪除cache-type =“ default”屬性,并使用no-cache運(yùn)行。

錯(cuò)誤消息也是另一個(gè)有用的信息。 出于安全原因,在INFO模式下記錄的內(nèi)容很少。 確保添加安全記錄器并將日志子系統(tǒng)中控制臺(tái)記錄器的日志級(jí)別更改為T(mén)RACE:

<logger category="org.jboss.security"><level name="TRACE"/></logger>

您最喜歡的瀏覽器的“隱身功能”更加有用。 這將阻止您再次使用相同的憑據(jù)運(yùn)行,而您要做的就是使用其他帳戶(hù)。 但這也可以通過(guò)注銷(xiāo)輕松解決。 但這是下一篇文章的另一個(gè)重要主題。

翻譯自: 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

總結(jié)

以上是生活随笔為你收集整理的使用WildFly 8.2.0.Final,Primefaces 5.1和MySQL 5的JDBC领域和基于表单的身份验证的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。