配置JBoss如何從數(shù)據(jù)庫里讀取信息
在我的項目一開始的時候由于時間關(guān)系,沒能摸清楚如何實現(xiàn)用自己寫的模塊處理登錄,所以就采用了比較簡單RDBMS(即用JBoss的 DatabaseServerLoginModule)模塊處理登錄事件,然后通過一個過濾器判斷用戶是否已經(jīng)登錄,如果登錄了再從數(shù)據(jù)庫中讀取用戶信息到session中。雖然自己都感覺到有點不倫不類,但我還是將我的具體實現(xiàn)方式在下面寫出來:
1.配置login-config.xml
編輯JBoss主目錄下的 server/default/conf 目錄下的login-config.xml文件,在<policy>節(jié)點下加入如下的內(nèi)容:
- <policy>
- ….
- <application-policy name = "nccnm">
- <authentication>
- <login-module code = "org.jboss.security.auth.spi. DatabaseServerLoginModule" flag = "required">
- <!--配置訪問數(shù)據(jù)庫的連接池名稱為cnmtestds -->
- <module-option name = "dsJndiName">java:/ testds</module-option>
- <!--配置根據(jù)登錄名獲取密碼的sql語句 -->
- <module-option name = "principalsQuery">SELECT PASSWORD FROM OPERATOR WHERE LOGINID=?</module-option>
- <!--配置根據(jù)登錄名獲取用戶角色的sql語句 -->
- <module-option name = "rolesQuery">SELECT ROLENAME,'Roles' FROM V_ROLE WHERE LOGINID=?</module-option>
- <!--使用MD5方式加密密碼 -->
- <module-option name="hashAlgorithm">MD5</module-option>
- <!--將加密后的密碼再轉(zhuǎn)為base64編碼 -->
- <module-option name="hashEncoding">base64</module-option>
- </login-module>
- </authentication>
- </application-policy>
- ….
- </policy>
在這里順便簡單介紹一下MD5和Base64。MD5是一種不可逆的編碼算法,即你不可能由已經(jīng)加密的密碼字符串來根據(jù)固定的算法還原出原來的密碼,據(jù)說現(xiàn)在的銀行系統(tǒng)大多數(shù)采用這種方式來儲存用戶密碼,所以如果用戶的密碼遺失了,銀行也不可能通過查數(shù)據(jù)庫給你找回你原來設(shè)的密碼,只能重新設(shè)置。要破解MD5的密碼只能用很笨很好時的窮舉法。
而Base64的編碼其實大家都應(yīng)該經(jīng)常接觸,我們的電子郵件一般都是經(jīng)過Base64編碼后傳送的,如果您用的是Outlook Express收發(fā)郵件,那你可以通過郵件的“屬性/詳細信息/郵件來源”看到郵件的Base64編碼的信息。它將二進制數(shù)據(jù)編碼為字母和數(shù)字,因為字母和數(shù)字的個數(shù)少于256,所以它是把3個字節(jié)的二進制數(shù)據(jù)轉(zhuǎn)換為4個字節(jié)的字母和數(shù)字。所以經(jīng)過base64編碼的文件會比原來的文件大4/3倍。JBoss用專門的API來處理md5加密及base64的編碼和反編碼。
2.配置連接池
上面的文件中用到了一個名為testds的連接池,現(xiàn)在就來配置這個連接池。我這里用的是oracle數(shù)據(jù)庫,其它的數(shù)據(jù)庫的配置方式就不一一介紹了。具體的表結(jié)構(gòu)和建表的sql語句我這里也不再描述了,如果有不清楚的地方清留言問我。
編輯JBoss主目錄下的server\default \deploy目錄 (什么?你的目錄下沒有找到這個文件,沒關(guān)系,從你的JBoss主目錄的docs\examples\jca下copy一個過來)。在<datasources>節(jié)點之間加入如下內(nèi)容:
- <local-tx-datasource>
- <jndi-name>testds</jndi-name>
- <connection-url>jdbc:oracle:thin:@127.0.0.1:1521:mydb</connection-url>
- <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
- <user-name>test</user-name>
- <password>123</password>
- <exception-sorter-class-name>org.jboss.resource.adapter. jdbc.vendor.OracleExceptionSorter</exception-sorter-class-name>
- <metadata>
- <type-mapping>Oracle9i</type-mapping>
- </metadata>
- </local-tx-datasource>
3.配置JBoss-web.xml
配置JBoss就完成了,下面再配置我們的項目里的文件。
打開你的Web應(yīng)用下的Web目錄下的的WEB-INF目錄,新建一個JBoss-web.xml的文件,在文件中加入如下內(nèi)容:
- <jboss-web>
- <!-- Uncomment the security-domain to enable security. You will
- need to edit the htmladaptor login configuration to setup the
- login modules used to authentication users.
- -->
- <!-- 下面的nccnm就是在login-config.xml配置的application-policy的名稱 -->
- <security-domain>java:/jaas/ nccnm </security-domain>
- </jboss-web>
這個配置Jboss會告訴我們這個應(yīng)用的JAAS安全性策略到哪里去找。
4.配置web.xml
打開你的Web應(yīng)用下的Web目錄下的的WEB-INF目錄,編輯web.xml (這個文件應(yīng)該能找到吧?如果找不到就麻煩了,從頭去啃J2EE),加入如下的內(nèi)容:
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>login required</web-resource-name>
- <url-pattern>*.jsp</url-pattern>
- <url-pattern>*.htm</url-pattern>
- <url-pattern>*.html</url-pattern>
- <url-pattern>*.do</url-pattern>
- </web-resource-collection>
- <auth-constraint>
- <role-name>role1</role-name>
- </auth-constraint>
- </security-constraint>
- <login-config>
- <!-- 通過表單方式來提交登錄 -->
- <auth-method>FORM</auth-method>
- <realm-name>mydomain</realm-name>
- <form-login-config>
- <!-- 登錄頁面為login.jsp -->
- <form-login-page>/login.jsp</form-login-page>
- <!--登錄出錯的話轉(zhuǎn)到error.jsp頁面 -->
- <form-error-page>/error.jsp</form-error-page>
- </form-login-config>
- </login-config>
- <security-role>
- <role-name>role1</role-name>
- </security-role>
以上內(nèi)容的是配置JBoss,作用是本W(wǎng)eb應(yīng)用下的所有 jsp,htm,html,do為擴展名的資源都要登錄后才能訪問(你可以根據(jù)你的需要來設(shè)置,通常你可以設(shè)置<url-pattern>* </url-pattern>來限制沒有登錄所有的資源都不能訪問),而且只有role1角色的用戶才能訪問。
【編輯推薦】