zoukankan      html  css  js  c++  java
  • Tomcat7.0.40 基于DataSourceRealm的和JDBCRealm的资源用户访问控制

    软件版本:

    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&amp;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即可。



  • 相关阅读:
    OI竞赛常见错误总结
    lis最长上升子序列o(nlogn)优化
    链表及其简单应用
    栈及其简单应用
    哈希表Hash:概念与基本操作
    队列及其简单应用
    poj1418 Viva Confetti 判断圆是否可见
    poj1981 Circle and Points 单位圆覆盖问题
    poj2187 Beauty Contest(旋转卡壳)
    poj2932 Coneology (扫描线)
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3228698.html
Copyright © 2011-2022 走看看