软件版本:

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即可。

Tomcat7.0.40 基于DataSourceRealm的和JDBCRealm的资源用户访问控制的更多相关文章

  1. Tomcat7.0.40注册到服务启动报错error Code 1 +connector attribute sslcertificateFile must be defined when using ssl with apr

    Tomcat7.0.40 注册到服务启动遇到以下几个问题: 1.启动报错errorCode1 查看日志如下图: 解决办法: 这个是因为我的jdk版本问题,因为电脑是64位,安装的jdk是32位的所以会 ...

  2. Apache2.2+Tomcat7.0整合配置详解

    一.简单介绍 Apache.Tomcat Apache HTTP Server(简称 Apache),是 Apache 软件基金协会的一个开放源码的网页服务器,可以在 Windows.Unix.Lin ...

  3. Servlet实现表单提交(MyEclipse10,Tomcat7.0,JDK1.7,)——Java Web练习(一)

    1.MyEclipse|File|New|Project|Web Project    填写Project Name:exServlet,点选Java EE 6.0(配套Tomcat7.0) 2.代码 ...

  4. Ubuntu12.04 配置Java开发环境:JDK1.7+Eclipse+Tomcat7.0

    软硬件环境 Ubuntu12.04+JDK1.7+Eclipse+Tomcat7.0 内容列表 1.安装JDK1.7,配置JAVA环境 2.安装Eclipse 3.安装Tomcat7.0 1.安装JD ...

  5. 【转】Tomcat7.0.42源代码运行环境搭建

    转自:http://tyrion.iteye.com/blog/1903608 以前看过Tomcat5的一部分源代码,当时只看了个大概的启动分析,后来看了<How Tomcat Works> ...

  6. 编译可在Nexus5上运行的CyanogenMod13.0 ROM(基于Android6.0)

    编译可在Nexus5上运行的CyanogenMod13.0 ROM (基于Android6.0) 作者:寻禹@阿里聚安全 前言 下文中无特殊说明时CM代表CyanogenMod的缩写. 下文中说的“设 ...

  7. 【推荐】CentOS安装Tomcat-7.0.57+启动配置+安全配置+性能配置

    注:以下所有操作均在CentOS 6.5 x86_64位系统下完成. #准备工作# 在安装Tomcat之前,请确保已经安装了JDK-1.7环境,具体见<CentOS安装JDK-1.7>. ...

  8. 驱动开发学习笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统

    驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflas ...

  9. Tomcat7.0启动报错:java.lang.illegalargumentexception:taglib definition not consisten with specification version

    Tomcat7.0启动报错:java.lang.illegalargumentexception:taglib definition not consisten with specification ...

随机推荐

  1. __name__ == '__main__'的作用

    当你打开一个.py文件时,经常会在代码的最下面看到if __name__ == '__main__':,现在就来介 绍一下它的作用. 模块是对象,并且所有的模块都有一个内置属性 __name__.一个 ...

  2. 关于【键鼠<局域网>共享软件:synergy】install

    Installation 另外,本人在centos6.5环境下作为server运行时,遇到一个问题,synergy1.5随着系统升级居然变成了1.3X,所以如果遇到类似问题,请您先用 rpm -qa ...

  3. SOSEx ReadMe

    Quick Ref:--------------------------------------------------bhi [filename] BuildHeapIndex - Builds a ...

  4. oracle 自动增长

    在SQLSERVER和MYSQL里面自动增长字段直接设置就可以.在ORACLE里面就复杂多了.特别是我这样的初学者,不过网络是最好的老师,看了很多相关介绍,本人使用的是使用触发器.具体如下: 首先要创 ...

  5. show

    showproperties thefrm.Controls --显示属性??showmethods thefrm.Menu---显示功能?? showclass "*bitmap*&quo ...

  6. BZOJ 4013 实验比较

    Description 小D被邀请到实验室,做一个跟图片质量评价相关的主观实验.实验用到的图片集一共有\(N\)张图片,编号为\(1\)到\(N\).实验分若干轮进行,在每轮实验中,小\(D\)会被要 ...

  7. 初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)

    初次踏上GUI编程之路 —— 我的Qt学习方法及对Qt认识的不断转变 -> 开始接触GUI与开始接触Qt: 话说,我第一次看见“Qt”这一个名词,好像是在CSDN网站的主页上吧,因为CSDN好像 ...

  8. 通过Delphi获得qq安装路径

    procedure TForm1.Button2Click(Sender: TObject); var Reg:TRegistry; Val:TStrings; ii:System.Integer; ...

  9. JAVA程序,SESSION没有关闭导致数据库异常

    可以看到连接到数据库的机器名为perass: PROCESS 1234表示是JDBC的进程 查询SQL: select username,         machine,         statu ...

  10. 余弦距离、欧氏距离和杰卡德相似性度量的对比分析 by ChaoSimple

      1.余弦距离 余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量. 向量,是多维空间中有方向的线段,如果两个向量的方向一致,即夹角接近零,那么这两个向 ...