`
寒光2008
  • 浏览: 33351 次
  • 性别: Icon_minigender_1
  • 来自: 张家界
文章分类
社区版块
存档分类
最新评论

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 用户认证--域

    Tomcat是一个流行的开源Java Servlet容器,它提供了内置的安全功能,包括用户认证和授权,这些功能是通过“域”这一概念来实现的。 域在Tomcat中是一个用户数据库,类似于Unix中的用户群组。它存储了用户信息,包括...

    tomcat9.0.85可用版本压缩包

    Tomcat支持多种安全配置,如角色基的安全约束、SSL/TLS连接、 Realm(身份验证域)等。在conf/server.xml和conf/tomcat-users.xml文件中配置这些设置。 8. **性能优化**: 可以通过调整JVM参数、启用连接器优化、...

    Tomcat服务器配置 视频教程 Tomcat视频

    8. **安全配置**:如何设置用户访问权限,配置Realm(认证域)进行身份验证,以及使用SSL/TLS加密通信以增强安全性。 9. **日志和错误处理**:理解日志文件的位置和内容,以及如何调整日志级别和配置自定义日志记录...

    Tomcat中的Host和Engine级别的servlet容器.docx

    在Tomcat默认配置中,一个Engine通常只有一个Host作为其直接子容器,但这并不强制,可以根据需要添加更多的Host来处理多个域。 Engine容器的主要特性包括: 1. **默认Host**: Engine可以设置一个默认的Host,当...

    apache-tomcat-7.0.69

    4. **安全管理**:Tomcat提供了多种安全机制,如 Realm(认证域)用于验证用户身份,Role(角色)定义了用户权限,以及SSL支持以实现加密通信。 5. **连接器与线程模型**:Tomcat使用Coyote连接器处理网络连接,...

    Tomcat应用部署及nginx+tomcat实现动静分离项目

    作为Web服务器,Tomcat也提供了管理界面、安全域管理等附加功能。在了解Tomcat的同时,必然要涉及到JDK(Java Development Kit),即Java开发工具包,这是因为Tomcat运行Java应用程序,自然离不开Java环境的支持。 ...

    apache-tomcat-7.0.52_mirrorhem_tomcat_almost5fx_

    Apache Tomcat 7.0.52 是一个广泛使用的开源软件,主要作为Java Servlet和JavaServer Pages(JSP)的容器。它是由Apache Software Foundation维护的,是实现Java EE(现在称为Jakarta EE)Web部分的最流行选择之一。...

    tomcat架构原理剖析

    6. **Realm(域)**: Realm是Tomcat的身份验证和授权机制,它管理用户、角色和权限。不同的Realm实现可以连接到数据库、文件系统或其他安全认证服务来验证用户凭证。 7. **JNDI(Java Naming and Directory ...

    apache-tomcat-6.0.10-src

    4. **安全性**:Tomcat提供了多种安全措施,如Realm(认证域)用于管理用户身份验证,AccessLogValve记录访问日志,以及SSL支持进行加密通信。 5. **性能优化**:Tomcat可以通过调整线程池大小、启用连接器的NIO...

    apache-tomcat-8.5.68-src

    Tomcat支持多种安全机制,如SSL/TLS加密、 Realm(认证域)实现用户身份验证和角色授权,这些都在源码中有所体现。 7. **国际化与本地化**: Tomcat允许应用支持多种语言,通过Locale和Resource Bundle来实现。...

    apache-tomcat-7.0.39

    另外,还可以配置Realm(认证域)以实现用户身份验证和授权。 总的来说,Apache Tomcat 7.0.39是一个强大且灵活的Java Web服务器,广泛用于开发和部署各种规模的应用程序。在Linux环境下,它的部署和管理可以通过...

    apache-tomcat-7.0.75

    可以通过Realm(认证域)实现数据库或其他身份验证机制的集成。 6. **性能优化**:Tomcat允许通过调整各种配置参数来优化性能,例如线程池大小、连接超时、缓冲区大小等。 7. **多线程模型**:Tomcat使用基于线程...

    tomcat-7.0.56 接口说明文档

    Tomcat 7.0.56 是一个广泛应用的开源Java Servlet容器,由Apache软件基金会维护。这个接口说明文档是开发者理解和使用Tomcat进行Web应用程序开发的重要参考资料。它详细阐述了Tomcat内部的工作机制、API接口以及如何...

    apache-tomcat-7.0.14-src.zip

    此外,源码分析还可以帮助我们理解Tomcat的安全机制,如如何配置和使用Realm(认证域)来管理用户身份验证,以及如何通过Valve(阀门)接口插入自定义的请求处理逻辑。Valve是Tomcat中的一个关键组件,可以拦截和...

    Tomcat 6 Developer’s Guide

    Apache Tomcat 是一个免费开源的Servlet容器,它能够运行基于Java的Web应用程序。Tomcat 由 Apache 软件基金会支持并维护,最初是由James Duncan Davidson开发的。Tomcat 6 是 Tomcat 的一个重要版本,它基于 Java ...

    apache-tomcat-7.0.63-windows-x86.zip

    5. **安全性**:Tomcat支持基于角色的安全性(RBAC),可以配置多个Realm(域)来验证用户身份,同时可以通过访问控制列表(ACLs)来限制对Web应用的访问。 6. **性能优化**:Tomcat 7.0.x版本引入了许多性能优化,...

    tomcat6.0是一款免费开源的jsp服务器

    Tomcat的核心架构基于Servlet和JSP规范,它是实现这些规范的容器。在Tomcat6.0中,主要由以下几个核心组件构成: 1. Connector(连接器):负责接收和响应HTTP请求,将HTTP协议转换为内部的请求对象供Engine(引擎...

    tomcat安装版7.0.59

    5. **安全管理**:Tomcat支持多种安全配置,包括使用SSL/TLS加密通信、配置Realm(认证域)进行用户身份验证、使用角色和权限控制访问等。 6. **应用部署**:将Web应用的WAR文件放置在`webapps`目录下,Tomcat会...

    tomcat7 源码

    Tomcat支持多种安全策略,如SSL/TLS加密, Realm(认证域)进行用户身份验证,以及角色授权。可以通过` Realm `配置实现数据库、文件或Jaas等不同方式的认证。 7. **部署与热部署** 可以通过修改`conf/server.xml...

    apache-tomcat-8.0.23

    6. **安全性**:Tomcat提供了一套安全配置机制,包括 Realm(认证域)用于用户身份验证,Role(角色)定义权限,以及Access Control列表限制访问。用户应根据应用需求配置server.xml和context.xml文件以增强安全性。...

Global site tag (gtag.js) - Google Analytics