设为首页 收藏本站
查看: 588|回复: 0

[经验分享] tomcat 容器验证域

[复制链接]

尚未签到

发表于 2017-1-24 11:39:16 | 显示全部楼层 |阅读模式
在web.xml中的jdbcURL的值和server.xml中JDBCRealm的值都没有加上访问数据库的用户名和密码,所以才会出现错误。另外要注意,在XML中&是关键字,如果要表示&用&代替!!
    以下内容为转载!!!!!
      
域(Realm)是一个存储用户名,密码以及和用户名相联系的角色的”数据库”, 用户名,密码用来验证用户对一个或多个web应用程序的有效性。访问应用程序中特定资源的权限是被授予了拥有特殊角色的用户,而不是相关的用户名。通过用户名相关联,一个用户可以有任意数量的角色。

尽管Servlet规范描述了一个让应用程序可以通过部署描述符来生命安全需求的简单机制,但是并没有在API中提供servlet容器和用户名,密码之间的接口。大多数情况下,需要容器连接用于验证的数据库,目录服务器或产品中已经存在的验证机制。我在这里拿Tomcat的验证域作为例子:

Tomcat5定义了一个接口org.apache.catalina.Realm,插件组件可以继承它来完成上文提到的连接。Tomcat5里面附带了几个用于连接几种不同的验证信息源。

DataSourceRealm     验证存储在相关的数据库中,通过数据源来访问数据库

JDBCRealm          验证存储在相关的数据库中,通过JDBC连接来访问数据库

JNDIRealm          验证信息存储在LDAP目录服务器中,通过提供的JNDI来访问

MemoryRealm        验证信息存储在一个内存的集合中,集合内的数据从文件加载

  


Tomcat5中域的定义

域在配置文件conf/server.xml中定义。


<Realm className="... class name for this implementation"
       ... other attributes for this implementation .../>
域可以内嵌在以下三个不同的元素中,当然在不要的元素中域的作用范围也不同。

1在<Engine>元素内,它可以被所有的虚拟主机上的所有应用程序共享,除非在他的下级元素中覆盖了它


2 在<Host>元素内,它可以被此虚拟主机上的所有应用程序共享,除非在他的下级元素中覆盖了它


3 在<Host>元素内,这里定义的域只能被这个应用程序共享


  


Digested Passwords


对于标准的实现秘密都是明文存储的。在标准实现中支持加密(Digesting)用户秘密的概念,可以使用户的密码按照一种不易可逆的编码存储,同时也可以用于验证。可以通过指定Realm元素的digest属性来选择加密的密码验证,digest的属性值可以是java.security.MessageDigest class类 (SHA, MD2, or MD5).中的一个。org.apache.catalina.realm.RealmBase类的digest方法可以进行密码的加密。

  


JDBC域


JDBC域是Tomcat5  Realm接口的一个实现,通过jdbc连接来访问关系数据库中的用户。使用JDBC域数据库结构必须满足以下的一些需求。

1 必须有一个用户表包含用户名和密码列,表里存储可以被域识别的用户名和密码,如果在域中使用digest属性,密码列存储的也应是加密后的密码。

2 必须有一个用户角色表包含用户名和角色名两列。

以下是一个例子:

create table users (
  user_name         varchar(15) not null primary key,
  user_pass         varchar(15) not null
);

create table user_roles (
  user_name         varchar(15) not null,
  role_name         varchar(15) not null,
  primary key (user_name, role_name)
);

域元素的属性


<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
      driverName="org.gjt.mm.mysql.Driver" digest=”MD5”
   connectionURL="jdbc:mysql://localhost/authority"
       connectionName=”root” connectionPassword=”root”
       userTable="users" userNameCol="user_name" userCredCol="user_pass"
   userRoleTable="user_roles" roleNameCol="role_name"/>
  


className       使用的域类,这里是org.apache.catalina.realm.JDBCRealm

connectionName       用于连接数据库的用户名

connectionPassword       访问数据库的密码

connectionURL       访问数库库的连接

digest      使用的加密方法

driverName       连接数据库使用的驱动

roleNameCol       用户角色表中,角色名列

userCredCol       用户表中,用户密码列

userNameCol       用户名列

userRoleTable       用户角色表

userTable 用户表

  

  

在配置Tomcat的JDBCRealm的时候,有几个应该注意的地方

   1. 数据库JDBC驱动应该放在${tomcat.home}/server/lib目录下,而不能放在webapps的lib目录下,二者的class loader不同
   2. tomcat在启动时只会自动装载后缀为.jar的jar包,因此如果使用oracle9i的驱动,应把class12.zip改名为class12.jar
   3. 最好将JDBCRealm的配置信息放在webapp的context配置文件中,而不要放在server.xml中

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-332944-1-1.html 上篇帖子: Tomcat处理http请求过程 下篇帖子: tomcat 性能监控 lanbda probe
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表