除了默認(rèn)配置的 DataSourceRealm,Tomcat 還支持?JDBCRealm,它通過 JDBC 來訪問記錄在關(guān)系數(shù)據(jù)庫里的認(rèn)證信息。
JDBCRealm 的配置步驟如下:
-
在 $TOMCAT_HOME\conf\server.xml 配置 <Reaml/> 元素。
< Realm className ="org.apache.catalina.realm.JDBCRealm" driverName ="com.mysql.jdbc.Driver" connectionURL ="jdbc:mysql://localhost/tomcat" connectionName ="root" connectionPassword ="root" userTable ="users" userNameCol ="username" userCredCol ="userpass" userRoleTable ="roles" roleNameCol ="userrole" />
<Reaml /> 元素屬性說明:
屬性 說明 ?className ?Tomcat 的 JDBCRealm 實現(xiàn)類? ?driverName ?JDBC 驅(qū)動類 ?connectionURL ?數(shù)據(jù)庫連接地址 ?connectionName ?數(shù)據(jù)庫登錄用戶 ?connectionPassword? ?數(shù)據(jù)庫登錄密碼 ?userTable ?用戶表的表名 ?userNameCol ?用戶表中用戶列的列名 ?userCredCol ?用戶表中密碼列的列名 ?userRoleTable ?角色表的表名 ?roleNameCol ?角色表中的角色列 注:<Realm/> 元素可以放在 <Engine/> 元素中,這時該 Realm 會被所有應(yīng)用共享。 放在 <Host/> 元素中,會被該 Host 下的應(yīng)用程序共享。放在 <Context/> 元素中,則只有對應(yīng)的應(yīng)用程序能被訪問。
- 將 JDBC 驅(qū)動 jar 文件放置在?$TOMCAT_HOME\lib 目錄中。
-
在數(shù)據(jù)庫中創(chuàng)建用戶表與角色表,表名和命名要與上述的配置一致。
CREATE TABLE `users` ( `username` varchar ( 32 ) NOT NULL , `userpass` varchar ( 32 ) NOT NULL , PRIMARY KEY (`username`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8; CREATE TABLE `roles` ( `username` varchar ( 32 ) NOT NULL , `userrole` varchar ( 32 ) NOT NULL , PRIMARY KEY (`username`,`userrole`) ) ENGINE = InnoDB DEFAULT CHARSET = utf8;
-
在表中配置用戶與角色信息。
INSERT INTO `tomcat`.`users` (`username`, `userpass`) VALUES ( ' admin ' , ' admin ' ); INSERT INTO `tomcat`.`users` (`username`, `userpass`) VALUES ( ' huey ' , ' huey ' ); INSERT INTO `tomcat`.`users` (`username`, `userpass`) VALUES ( ' suer ' , ' suer ' ); INSERT INTO `tomcat`.`roles` (`username`, `role`) VALUES ( ' admin ' , ' admin ' ); INSERT INTO `tomcat`.`roles` (`username`, `role`) VALUES ( ' admin ' , ' common ' ); INSERT INTO `tomcat`.`roles` (`username`, `role`) VALUES ( ' huey ' , ' common ' ); INSERT INTO `tomcat`.`roles` (`username`, `role`) VALUES ( ' suer ' , ' common ' ); INSERT INTO `tomcat`.`roles` (`username`, `role`) VALUES ( ' suer ' , ' vip ' );
- 新建一個 Java Web 工程,編輯 web.xml 文件。
-
配置 <security-role/> 元素來定義角色。
< security-role > < role-name > admin </ role-name > </ security-role > < security-role > < role-name > common </ role-name > </ security-role > < security-role > < role-name > vip </ role-name > </ security-role >
-
配置 <security-constraint/> 元素,指定角色可訪問的資源集和可使用的 HTTP 方法。
< security-constraint > < web-resource-collection > < web-resource-name > Public resources </ web-resource-name > < url-pattern > /home/* </ url-pattern > < http-method > HEAD </ http-method > < http-method > GET </ http-method > </ web-resource-collection > < auth-constraint > < role-name > common </ role-name > </ auth-constraint > </ security-constraint > < security-constraint > < web-resource-collection > < web-resource-name > Secret resources </ web-resource-name > < url-pattern > /blog/* </ url-pattern > < url-pattern > /photo/* </ url-pattern > < http-method > HEAD </ http-method > < http-method > GET </ http-method > < http-method > POST </ http-method > < http-method > PUT </ http-method > </ web-resource-collection > < auth-constraint > < role-name > admin </ role-name > < role-name > vip </ role-name > </ auth-constraint > </ security-constraint >
-
配置 <login-config/> 元素,指定認(rèn)證方式為基本認(rèn)證,并指定安全域。
< login-config > < auth-method > BASIC </ auth-method > < realm-name > hueyhome </ realm-name > </ login-config >
-
測試。
C:\Users\huey> curl -I -u "suer:suer" http://localhost:8080/helloweb/blog/index.html HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Pragma: No-cache Cache-Control: no-cache Expires: Thu, 01 Jan 1970 08:00:00 CST Accept-Ranges: bytes ETag: W/"261-1431758220107" Last-Modified: Sat, 16 May 2015 06:37:00 GMT Content-Type: text/html Content-Length: 261 Date: Tue, 19 May 2015 11:44:20 GMT
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
