您的位置:首页 > 运维架构 > Tomcat

Tomcat7.0.40 基于DataSourceRealm的和JDBCRealm的资源用户访问控制

2014-04-21 16:28 267 查看
软件版本:

Tomcat 7.0.40

Mysql: 5.1

Host: CentOS 6.3 64bit

使用JDBCRealm (Tomcat 会使用所给的JDBC Connecter 自己去连MySQL 数据库并进行用户验证):

1) 下载MySQL-JDBC connector 如mysql-connector-java-5.1.24-bin.jar放到$CATALINA_HOME/lib目录下;

2) 连上MySQL 创建数据库(比如数据库名字叫DBName),在此库里面创建2个表(users表和roles表),表结构如下:

CREATE TABLE `roles` (

  `Id` int(11) NOT NULL AUTO_INCREMENT,

  `Role` varchar(50) DEFAULT NULL,

  `Username` varchar(50) DEFAULT NULL,

  PRIMARY KEY (`Id`)

) ;

CREATE TABLE `users` (

  `Id` int(11) NOT NULL AUTO_INCREMENT,

  `Username` varchar(50) NOT NULL DEFAULT '',

  `Password` varchar(50) DEFAULT '',

  `Email` varchar(255) DEFAULT NULL,

  PRIMARY KEY (`Id`)

) ;

INSERT INTO `users` VALUES (1,'root','password',NULL);

INSERT INTO `roles` VALUES (1,'rootgrp','root');

表示root用户在rootgrp组里。

3)配置Tomcat $CATALINA_HOME/conf/server.xml

比如在Engine Section下增加:

<Realm className="org.apache.catalina.realm.JDBCRealm"

             driverName="com.mysql.jdbc.Driver"

             factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"    <!-- 使用Tomcat 新的ConnectionPool-->

             connectionURL="jdbc:mysql://localhost:3306/DBName?user=root&password=password"

             userTable="users"

             userNameCol="username"

             userCredCol="password"

             userRoleTable="roles"

             roleNameCol="role"/>

注意: Tomcat7默认的server.xml里面在Engine里面也有一段Realm配置代码,如下面所示, 此处需要注释掉它,否则会出问题。

<!--   <Realm className="org.apache.catalina.realm.LockOutRealm"> -->

<!--

       <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

               resourceName="UserDatabase"/>

       </Realm>

-->

4)在你应用包的WEB-INF/web.xml里增加如下,做资源访问限制,否则上面配置不起作用,如果想让访问整个site都起作用,在webapps/ROOT/WEB-INF/web.xml里增加以下内容。

<web-app .........>

..................

<security-constraint>

     <web-resource-collection>

       <web-resource-name>web pages</web-resource-name>

       <url-pattern>/*</url-pattern>   <!-- 限制整个节点 只有rootgrp的人才能访问-->

     </web-resource-collection>

     <auth-constraint>

       <role-name>rootgrp</role-name>

     </auth-constraint>

  </security-constraint>

  <login-config>

    <auth-method>BASIC</auth-method>

    <realm-name>Tomcat Application</realm-name>

  </login-config>

  <security-role>

    <description>

      The role that is required to access the pages of this website

    </description>

    <role-name>rootgrp</role-name>

  </security-role>

.............

</web-app>

重启即可。

如果想用DataSourceRealm去做访问控制认证,重复以上步骤,但唯一需要改动的是将第3)步替换为下面的3A)步骤,

3A)在$CATALINA_HOME/conf/server.xml文件中,在<GlobalNamingResources>一节下增加一个DataSource资源如下:

<GlobalNamingResources>

       <Resource name="jdbc/DBName" auth="Container"

              type="javax.sql.DataSource"

              factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"  <!-- 使用Tomcat 新的ConnectionPool-->

              maxActive="100" maxIdle="30" maxWait="10000"

              username="root" password="password"

              driverClassName="com.mysql.jdbc.Driver"

              url="jdbc:mysql://localhost:3306/DBName" />

</GlobalNamingResources>

然后再在此server.xml里面的如<Engine>Section下面增加以下内容

<Realm className="org.apache.catalina.realm.DataSourceRealm"

             dataSourceName="jdbc/DBName"

             userTable="users"

             userNameCol="Username"

             userCredCol="Password"

             userRoleTable="roles"

             roleNameCol="Role"/>

同样的,需要把Server.xml里面默认的那个Realm给注释掉。

重启Tomcat即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  apache tomcat