在 Tomcat 中设置 JDBCRealm

除了默认配置的 DataSourceRealm,Tomcat 还支持 JDBCRealm,它通过 JDBC 来访问记录在关系数据库里的认证信息。

JDBCRealm 的配置步骤如下:

  1. 在 $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 实现类 
     driverName  JDBC 驱动类
     connectionURL  数据库连接地址
     connectionName  数据库登录用户
     connectionPassword   数据库登录密码
     userTable  用户表的表名
     userNameCol  用户表中用户列的列名
     userCredCol  用户表中密码列的列名
     userRoleTable  角色表的表名
     roleNameCol  角色表中的角色列

    注:<Realm/> 元素可以放在 <Engine/> 元素中,这时该 Realm 会被所有应用共享。 放在 <Host/> 元素中,会被该 Host 下的应用程序共享。放在 <Context/> 元素中,则只有对应的应用程序能被访问。

  2. 将 JDBC 驱动 jar 文件放置在 $TOMCAT_HOME\lib 目录中。
  3. 在数据库中创建用户表与角色表,表名和命名要与上述的配置一致。

    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;
  4. 在表中配置用户与角色信息。

    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‘);
  5. 新建一个 Java Web 工程,编辑 web.xml 文件。
  6. 配置 <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> 
  7. 配置 <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>
  8. 配置 <login-config/> 元素,指定认证方式为基本认证,并指定安全域。

    <login-config>
        <auth-method>BASIC</auth-method>
        <realm-name>hueyhome</realm-name>
    </login-config>
  9. 测试。

    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
时间: 2024-10-08 01:49:47

在 Tomcat 中设置 JDBCRealm的相关文章

在 Tomcat 中设置 HTTP 基本认证

在 Tomcat 中设置 HTTP 基本认证的示例 在 $TOMCAT_HOME\conf\tomcat-users.xml 文件中配置角色和用户: <tomcat-users> <role rolename="all"/> <role rolename="admin"/> <user username="all" password="all" roles="all"

Tomcat中设置数据源和连接池

对于大型网站来说,信息查询的次数会非常多,每次查询都需要这样的过程:加载驱动程序.创建连接.创建语句对象.执行SQL语句.关闭这些对象.这样使得每一个用户访问的时候都需要服务器做出相应,这样的话服务器端承受巨大的压力,如此效率就会下降,建立与数据库之间的连接和释放连接会占用很多系统的时间.如果能够让所有用户共享连接,仅仅创建一次连接,谁需要连接谁就使用,这样可以大大减少创建连接所占用的时间.让所有用户共享连接,并且在需要的时候就能够使用,就需要有专门的机制来创建连接,数据库连接池(Dababas

Eclipse中设置tomcat的启动内存

现象:目前每次使用Eclipse启动Tomcat 的时候经常出现OutOfMemoryError thrown from the UncaughtExceptionHandler in thread *** 解决办法 在debug Configuration中设置Arguments 下面的VM arguments加上  -Xms512m -Xmx1024m  -XX:MaxPermSize=512m Eclipse中设置tomcat的启动内存,布布扣,bubuko.com

解决tomcat中server.xml设置二级域名 [java.lang.OutOfMemoryError: PermGen space]

<Host name="XXX.XXX.XXX" debug="0" appBase="C:\\JavaWeb\\mytomcatServer\\XXX"  unpackWARs="true" autoDeploy="true"  xmlValidation="false" xmlNamespaceAware="false">  <Alias>

tomcat中jvm参数设置

Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对JavaJVM有关内存方面的知识进行详细介绍. 一.Java JVM内存介绍 JVM管理两种类型的内存,堆和非堆.按照官方的说法:"Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配.堆是在 Java 虚拟机启动时创建的.""在JVM中堆之外的内存称为非堆内存(Non-heap m

tomcat在linux中设置开机启动

#!/bin/bash export JAVA_HOME=/usr/lib/jdk/jdk1.7.0_72 WEBROOT_PATH=/home/zhengze/workspace WEBSERVER_PATH=$WEBROOT_PATH/web-server/apache-tomcat-6.0.41 STARTUP_SHELL=$WEBSERVER_PATH/bin/startup.sh SHUTDOWN_SHELL=$WEBSERVER_PATH/bin/shutdown.sh case "

如何在idea中设置Tomcat虚拟路径

设置项目的根路径: 设置指定文件的在Tomcat中的虚拟路径: 代码: String fileName = MyFileUtil.getFileName(uploadFileName); File file = new File("/Users/Shared/jpg" , fileName);//文件目录真实路径 FileUtils.copyFile(upload, file); customer.setCust_image("jpg/"+fileName);//&

用JAXWS-RI在Tomcat中发布WebService

JDK中已经内置了Webservice发布,不过要用Tomcat等Web服务器发布WebService,还需要用第三方Webservice框架.Axis2和CXF是目前最流行的Webservice框架,这两个框架各有优点,不过都属于重量级框架. JAXWS-RI是JAX WebService参考实现.相对于Axis2和CXF,JAXWS-RI是一个轻量级的框架.虽然是个轻量级框架,JAXWS-RI也提供了在Web服务器中发布Webservice的功能.官网地址https://jax-ws.jav

Tomcat下设置项目为默认项目

项目的实际使用中经常需要将当前项目设为tomcat的默认项目,而不是进入到tomcat的页面,有几种方法可以实现,注意第二种.第三种情况需要先删除webapps下的ROOT目录,否则会失败. 一.将自己的项目改名为ROOT注意项目名称要大写 如果改完后没生效,建议清空tomcat中的work目录(缓存) 二.修改配置文件server.xml 增加<Context path="" docBase="Cluster" debug="0" rel