除了默认配置的 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

在 Tomcat 中设置 JDBCRealm的更多相关文章

  1. tomcat中设置Java 客户端程序的http(https)访问代理

    1.假定http/https代理服务器为 127.0.0.1 端口为8118 2.在tomcat/bin/catalina.sh脚本文件中设置JAVA_OPTS,如下图: 保存后重启tomcat就能生 ...

  2. tomcat中设置多项目共享jar;类包

    随着服务器上的tomcat部署的项目越来越多,最近在部署一个新的项目的时候出现内存溢出的错误 Exception in thread "main" java.lang.OutOfM ...

  3. 使用eclipse在tomcat中设置项目启动的虚拟路径

    很多时候我们在启动项目的时候都会在浏览器输入"localhost:+端口号+项目名称" 其实tomcat是可以省去这种麻烦的,通过设置项目的虚拟路径就可访问项目了 第一步 选择ec ...

  4. Tomcat SSL 设置

    1. 先用如下命令生成tomcat 证书 cls rem please set the env JAVA_HOME before run this bat file SET JAVA_HOME=C:\ ...

  5. Tomcat学习笔记 - 错误日志 - NetBeans配置tomcat出错情况总结 -- 尚未授予访问 Tomcat 服务器的权限。请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用户名和口令。 有关详细信息, 请查看服务器日志。

    错误描述: 发布时控制台出现: 部署错误: 尚未授予访问 Tomcat 服务器的权限.请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用 ...

  6. Eclipse中设置tomcat的启动内存

    现象:眼下每次使用Eclipse启动Tomcat 的时候常常出现OutOfMemoryError thrown from the UncaughtExceptionHandler in thread ...

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

    设置项目的根路径: 设置指定文件的在Tomcat中的虚拟路径: 代码: String fileName = MyFileUtil.getFileName(uploadFileName); File f ...

  8. Tomcat中JVM参数设置

    Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对JavaJVM有关内存方面的知识进 ...

  9. tomcat在ubuntu中设置开机启动

    #!/bin/bash export JAVA_HOME=/usr/lib/jdk/jdk1.7.0_72 WEBROOT_PATH=/home/zhengze/workspace WEBSERVER ...

随机推荐

  1. java tools: jmap

    SYNOPSIS jmap [ option ] pid click here to see detail DESCRIPTION jmap prints shared object memory m ...

  2. UI进阶 数据加密

    一.数据安全 在互联网发展趋势迅猛的今天,数据安全的重要性日趋凸显.也成为我们必须了解的互联网知识.在移动互联网浪潮下,用户的资金安全.企业的信息安全都是我们实际开发中必须考虑的内容.

  3. github 坑爹的仓库初始化设置

    一段时间没有使用 github,奇妙地发现自己连仓库都不会建了,汗一个... 话说上次我在 github 上面建了一个仓库,在创建仓库的设置表单中勾上了自动生成 README.md 选项, ok,创建 ...

  4. PROCESS_YIELD()宏使用及过程分析<contiki学习笔记之八>

    好吧,昨晚上研究了switch()的底层实现原理--发现它并不是一般C语言教科书上那样所言,当然,这对于本身就非常熟悉汇编的同学来说,是小菜一碟.世界上,很多事情是巧合与必然的结合体,没有无缘无故的爱 ...

  5. Codeforces Round #185 (Div. 2) B. Archer 水题

    B. Archer Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/312/problem/B D ...

  6. MyBatis之三:多表联合查询

    在这篇文章里面主要讲解如何在mybatis里面使用一对一.一对多.多表联合查询(类似视图)操作的例子. 注:阅读本文前请先大概看一下之前两篇文章. 一.表结构 班级表class,学生表student, ...

  7. [AngularJS] Directive using another directive by 'require'

    Directive can use another directive though 'require' keyword. angular.module('docsTabsExample', []) ...

  8. win7中USB音箱没有声音解决的方法

    Win7装好后,原来在XP中工作正常的USB小音箱却不工作了,重装了声卡驱动还是一样,后来通过下面尝试最终好用了. 1.右键右下角喇叭button. 2.点击"播放设备". 3.设 ...

  9. iOS开发——数据持久化Swift篇&使用Core Data进行数据持久化存储

    使用Core Data进行数据持久化存储   一,Core Data介绍 1,Core Data是iOS5之后才出现的一个数据持久化存储框架,它提供了对象-关系映射(ORM)的功能,即能够将对象转化成 ...

  10. ASP.NET 去除所有HTML标记的方法

    using System.Text.RegularExpressions /// <summary> /// 去除HTML标记 /// </summary> /// <p ...