tomcat 容器验证域

在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中


你可能感兴趣的:(数据结构,tomcat,xml,应用服务器,jdbc)