在 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

     

转载于:https://www.cnblogs.com/huey/p/4515340.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/492250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学界 | UC伯克利发布一个低成本家居机器人,会叠衣服、会泡咖啡

BLUE 机器人叠毛巾&#xff0c;实际花费时间约 50 秒来源&#xff1a;AI科技评论加州大学伯克利分校 Pieter Abbeel 教授今天在推特公开宣布了伯克利机器人学习实验室最新开发的机器人 BLUE。这款机器人的特点是低成本&#xff08;不到 5000 美元&#xff09;、基于 AI 控制&am…

硬件产品的成本构成——研发、产品边际成本和服务

硬件产品的成本构成一款硬件产品的成本由许多因素构成&#xff0c;主要可以归为三类&#xff1a;研发成本、产品边际成本和服务成本。这里借用了经济学中的一个概念&#xff1a;边际成本&#xff0c;即增加一单位的产量所带来的成本增加量。对于任何一款硬件产品&#xff0c;每…

JAVA并发编程3_线程同步之synchronized关键字

在上一篇博客里讲解了JAVA的线程的内存模型&#xff0c;见&#xff1a;JAVA并发编程2_线程安全&内存模型&#xff0c;接着上一篇提到的问题解决多线程共享资源的情况下的线程安全问题。 不安全线程分析 public class Test implements Runnable {private int i 0;private i…

深度学习技术发展趋势浅析

来源&#xff1a;中国信息通信研究院CAICT当前&#xff0c;人工智能发展借助深度学习技术突破得到了全面关注和助力推动&#xff0c;各国政府高度重视、资本热潮仍在加码&#xff0c;各界对其成为发展热点也达成了共识。本文旨在分析深度学习技术现状&#xff0c;研判深度学习发…

(含Matlab源码)算术编码(arithmetic coding)的underflow问题

0、文章结构 文章的行文逻辑如下&#xff0c;看官可以根据需要跳读&#xff0c;节省时间。 1、介绍underflow和overflow. 2、underflow问题起源 3、underflow问起探索 4、underflow和overflow的常见情形 5、处理一些溢出问题的小技巧 6、对其中的两种小技巧的优缺点比较…

Union与Union All的区别

Union与Union All的区别如果我们需要将两个select语句的结果作为一个整体显示出来&#xff0c;我们就需要用到union或者union all关键字。union(或称为联合)的作用是将多个结果合并在一起显示出来。union和union all的区别是,union会自动压缩多个结果集合中的重复结果&#xff…

人类与AI结合的最佳形态是什么样?|A16Z内部万字报告

来源&#xff1a;A16Z合伙人Frank Chen2017年7月&#xff0c;我发布了一个关于人工智能、机器学习和深度学习的入门视频。从那以后&#xff0c;我一直痴迷于阅读关于机器学习的报道。一般来说&#xff0c;你会在媒体的头版上看到两类报道。一类报道的标题是“机器人来抢你的工作…

(Matlab源码)Matlab实现算术编码(Arithmetic coding)超级详解(每一段代码都可以看懂)

1、代码功能 输入&#xff1a;一个字符串输出&#xff1a; codeword&#xff08;码值&#xff09; codeword所占的位数 2、代码框图 3、代码超详解 统计字符串中的字符种类&#xff0c;调用函数&#xff0c;放入数组b中。 bunique(str1); 统计每种字符的个数&#xff0c;放入…

jquery获取select中的option的text值

<select id"ddd"><option id"22">fdsfds</option><option id"12">fdsfds</option><option id"32">哈哈</option><option id"42">嘻嘻</option></select>1.你的…

(含Python源码)Python实现K阶多项式的5种回归算法(regression)

0、文章结构 为了方便客官根据需要取阅&#xff0c;节约时间&#xff0c;文章目录结构如下&#xff1a; 问题描述理论部分&#xff1a;五种回归算法两种Python读取文件的方法Python实现五种回归算法使用的工具箱总结 1、问题描述 K阶多项式表达式 其中&#xff0c; 现有数据…

首张人类黑洞照片的背后

摘要&#xff1a;沈海军&#xff1a;今天&#xff08;2019年4月10日&#xff09;下午接受广东卫视采访&#xff0c;就晚上21:00即将发布的人类首张黑洞照片发表了评论。提笔撰稿时&#xff0c;尚未到照片官方的发布时间&#xff0c;故不能一睹黑洞照片的芳容&#xff0c;但鉴于…

svn is already under version control问题解决

svn ci 时出现 xx is already under version control&#xff0c;然后无法提交&#xff0c;出现这个问题的原因是你所提交的文件或目录是其他SVN的东西&#xff0c;即下面有.svn的目录&#xff0c;需要先把它们删除才能提交&#xff0c;具体操作如下&#xff1a; 打开出现问题的…

(Matlab函数详解)机器学习中的4种分类算法(LDA、QDA、SVM、KNN)

1、LDA(Linear discriminant analysis) 函数&#xff1a;[class, err]classify(sample, training, group); 输入&#xff1a;sample待测样本&#xff0c;% 矩阵 m*n m为样本数&#xff0c;n为特征数 training训练样本&#xff0c;% 矩阵k*n k为样本数&#xff0c;n为特征数&…

一场“交通进化”将至: 5G带给车联网与自动驾驶哪些升级?

来源 &#xff1a;腾讯科技作者&#xff1a;李俨 美国高通公司技术标准高级总监5G时代已经来临&#xff0c;走向商用的步伐也在逐渐加快。腾讯科技联合优质科技CP以及行业专家推出“5G局中局”系列文章&#xff0c;为你解读5G在通讯、物联网、车联网、工业联网、边缘计算、云服…

产品经理的几个阶段

产品经理是这几年最火热的互联网职位之一&#xff0c;随着这些年的发展积累了大量的顶着产品经理称号的年轻人。虽然在数量上有了巨大的增长&#xff0c;但是在我们实际的工作招聘中却很悲哀的发现&#xff0c;很多产品岗位死活招不到人&#xff1b; 甚至好不容易花个大价钱挖到…

(一看就懂)傅里叶变换、拉普拉斯变换、Z变换、卷积的经典文章汇总

0、前沿 在复习傅里叶变换、拉普拉斯变换、Z变换和卷积等知识时&#xff0c;我发现网上有非常非常多的大牛。他们用通俗易懂的语言来讲解这些复杂的知识&#xff0c;使人豁然开朗。 1、连续时间信号的傅里叶级数与傅里叶变换 如果现在还无法理解&#xff0c;为什么要对信号进…

特斯拉发布Q1无人驾驶安全报告:事故增多 但还是比人类少

来源&#xff1a;聚焦AI的近日&#xff0c;电动汽车制造商特斯拉发布了2019年第一季度自动驾驶仪&#xff08;Autopilot&#xff09;安全性报告&#xff0c;这是特斯拉发布的第三份类似报告&#xff0c;此前该公司认为媒体对特斯拉车辆事故的报道有失公允&#xff0c;因此他们开…

log4net 小记

突然想到想测试一下log4net&#xff0c;结果折腾了两天&#xff0c;才弄出来.....记录下来以备以后查看 背景&#xff1a;vs2013 mvc项目中想体验下log4net的功能&#xff08;主要是文件记录&#xff09; 翻看了log4net的相关资料&#xff0c;才发现其实它是有很多功能的&#…

关于找工作和选专业的思考

个人的成长离不开国家的发展&#xff0c;国家的发展离不开国际的大气候。 国家之间的竞争主要归于经济竞争&#xff0c;经济的核心在于产业&#xff0c;产业的核心则在于科学和技术。 无论是找工作还是选专业&#xff0c;赌的都是对未来趋势的预测&#xff0c;没有人会希望自己…

DARPA 2020财年研发预算 人工智能应用研究投资急剧增长

来源&#xff1a;美国国防部等摘要&#xff1a;2019年3月&#xff0c;特朗普政府公布2020财年预算申请。根据预算法案&#xff0c;2020财年美国国家安全预算总额增加340亿美元&#xff0c;达到7500亿美元&#xff0c;比上年增加5%。美国防部分得的经费为7180亿美元&#xff0c;…