和大多数Catalina组件不一样的是,Realm有几个标准的实现。所以,必须使用className属性来选择你希望使用的实现。
JDBC Database Realm (org.apache.catalina.realm.JDBCRealm)
JDBC Database
Realm将Catalina连接到一个关系数据库,通过正确的JDBC驱动访问,用来查询用户名,密码和他们相关的角色。由于查询是在每次必要的时候完
成的,因此数据库的改变会马上反映到用来认证新登录的信息中。
除了用来获取必需信息的数据库表名和列名以外,还有很多附加的属性用来配置到数据库的连接:
属性
描述
connectionName
|
建立JDBC连接时使用的数据库用户名
|
connectionPassword
|
建立JDBC连接时使用的数据库密码
|
connectionURL
|
建立数据库连接时传递给JDBC驱动的连接URL
|
digest
|
用来对数据库中的用户密码编码的“消息摘要”算法的名称。如果没有指定,密码以明文方式存储。
|
driverName
|
连接到认证数据库的JDBC驱动的完整的Java类名
|
roleNameCol
|
“用户角色“表中的列名,包含了指定给对应用户的角色名称。
|
userCredCol
|
“用户”表中的列名,包含用户的可信数据(比如,密码)。如果设置了digest属性,则假定密码已经用了指定的算法进行编码,否则,假定密码是明文密码。
|
userNameCol
|
“用户”表和“用户角色”表中的列名,包含用户的用户名
|
userRoleTable
|
“用户角色”表名,必须包含userNameCol和roleNameCol指定的列。
|
userTable
|
用户表,必须包含userNameCol和userCredCol属性指定的列
|
有关使用JDBC Database Realm组件来设置container managed security的更多信息,参考FIXME
- Nested pointer into HOW-TO
DataSource Database Realm (org.apache.catalina.realm.DataSourceRealm)
DataSource Database Realm 将Catalina连接到一个关系数据库,通过一个名为JDBC
Datasource的JNDI访问,查询用户名,密码以及他们对应的角色。由于查询在每次需要的时候进行,因此数据库的变化会马上反映到用来认证新的登录的信息上。
JDBC Realm使用单个数据库连接。这要求基于realm的认证之间同步,比如,同一时刻只允许一个认证。这对需要大量使用认证的应用程序来说是一个瓶颈。
DataSource Database Realm支持并发的基于Realm的认证,允许JDBC DataSource处理优化问题,比如数据库连接池。
有很多选项可以配置JNDI JDBC Datasource的名字,同时包括用来获取必要信息的数据库表名和列名。
属性
描述
dataSourceName
|
Realm的JNDI JDBC DataSource的名字 |
digest
|
用来对存储在数据库中的用户密码编码的消息摘要算法的名称。如果没有指定,假定用户密码以明文方式存储。
|
roleNameCol
|
“用户角色“表中的列名,包含了指定给对应用户的角色名称。
|
userCredCol
|
“用户”表中的列名,包含了用户的可信数据(比如,密码)。如果设置了digest属性,则假定密码已经用了指定的算法进行编码,否则,假定密码是明文密码。
|
userNameCol
|
“用户”表和“用户角色”表中的列名,包含用户的用户名。
|
userRoleTable
|
用户角色表名,必须包含userNameCol和roleNameCol指定的列。
|
userTable
|
用户表,必须包含userNameCol和userCredCol属性指定的列。 |
有关使用DataSource Database Realm组件配置container managed security的更多信息,参考DataSource
Realm HOW-TO。
JNDI Directory Realm (org.apache.catalina.realm.JNDIRealm)
JNDI Directory Realm将Catalina连接到一个LDAP目录,通过正确的JNDI驱动访问。LDAP目录存储了用户名,密码以及他们相应的角色。对目录的修改马上反映到用来认证新的登录的数据上面。
directory realm支持许多使用LDAP进行认证的方法:
- realm可以使用模式来决定用户目录条目的唯一名字(distinguished name),或者搜索目录来定位该条目;
- realm可以将用户条目的唯一名字和用户给出的密码绑定到目录上,对用户进行认证;或者,从用户条目中取出密码,在本地进行比较;
- 在目录中,角色可以以单独的条目存在(比如,用户所属的组条目),或者,角色可以是用户条目的一个属性,或者两种情况都是;
除了到目录的连接,用户从目录中获取信息的元素和属性名称以外,Directory Realm还支持很多其他的附加属性:
属性
描述
authentication
|
使用的认证类型,字符串类型。可以是“none”,“simple”,“strong”或者提供者定义的其他类型,如果没有值,使用提供者提供的缺省值。
|
connectionName
|
创建目录连接使用的目录用户名。如果没有指定,使用匿名连接,这在大多数情况下就足够了,除非你指定了userPassword属性 |
connectionPassword
|
创建目录连接使用的目录密码。如果没有指定,使用匿名连接,这在大多数情况下就足够了,除非你指定userPassword属性。
|
connectionURL
|
创建目录连接时,传递给JNDI驱动的连接URL。 |
contextFactory
|
用来取得JNDI InitialContext的工厂类的Java类名。缺省情况下,假定使用标准的JNDI
LDAP提供者。
|
protocol
|
使用的安全协议。如果没有指定,使用提供者提供的缺省值。
|
roleBase
|
用于角色查找的基准目录条目。如果没有指定,使用目录上下文的顶级元素。
|
roleName
|
在角色查找中,包含角色名的属性的名称。另外,在用户条目中,你可以使用userRoleName来指定包含额外角色名的属性名称,。如果没有指定,不搜索角色,角色存在于用户条目中。
|
roleSearch
|
用来进行角色查找的LDAP过滤器表达式。使用{0}来代替用户的唯一名称,{1}来代替用户名。如果没有指定,不对角色进行搜索,角色从用户条目中由userRoleName指定的属性得到。
|
roleSubtree
|
在查找与用户相关联的角色时,如果想搜索由roleBase属性指定的元素的整个子树,设为true。缺省值为false,只对顶级元素进行搜索。
|
userBase
|
在使用userSearch表达式搜索用户的时候的基准元素。如果使用userPattern表达式进行搜索,不使用这个属性。
|
userPassword
|
在
用户条目中包含用户密码的属性名。如果指定了这个值,JNDIRealm使用connectionName和connectionPassword属性指
定的值绑定到目录,取出对应的属性,与被认证的用户给出的值进行比较。如果不指定这个值,JNDIRealm会尝试使用用户条目的唯一名称和用户给出的密
码绑定到目录,如果绑定成功,说明认证成功。
|
userPattern
|
用户目录条目的唯一名称的模式,{0}代表实际的用户名。在唯一名称包含用户名,其他的项都相同的时候,可以使用这个属性,而不是使用userSearch,userSubtree和userBase.
|
userRoleName
|
用户目录条目中的一个属性名,该属性包含了零个或多个指定给用户的角色名的值。另外,如果角色以单独的条目存在,可以使用roleName属性来指定属性名,在搜索目录的时候,可以得到这个属性。
如果不指定userRoleName,用户的所有角色通过角色搜索得到;
|
userSearch
|
搜索用户目录条目时,使用的LDAP过滤表达式,{0}代表实际的用户名,可以使用userSearch,userBase和userSubtree属性一起来代替userPattern搜索目录。
|
userSubtree
|
如果希望搜索由userBase属性指定的元素的整个子树,设为true,缺省值为false,即只搜索顶级元素。如果使用userPattern表达式,不使用这个属性。
|
有关使用JNDI Directory Realm组件设置container managed security的更多信息,参考
FIXME - Nested pointer into HOW-TO
Memory Based Realm (org.apache.catalina.realm.MemoryRealm)
Memory Based Realm是一个简单的Realm实现,它从XML文件中读取用户信息,将这些信息标识为内存中的一系列Java对象的集合。这个实现只是用来启动container
managed security,而不是用在产品中。所以,当数据文件改变的时候,没有机制来更新内存中用户的集合。
Memory Based Realm实现支持如下的附加属性:
属性
描述
pathname
|
包含用户信息的XML文件的绝对或者相对路径。XML文件的格式在下面定义。如果没有指定这个属性,缺省值为conf/tomcat-users.xml |
由pathname属性引用的XML文档必须满足如下需求:
- 根元素必须是
<tomcat-users>
- 每个授权用户必须用单个XML元素<user>来标识,嵌套在根元素中
- 每个<user>元素必须具有下列属性:
- name
- 用户名(在文件内必须唯一).
- password
- 用户密码(明文).
- roles
- 用户角色列表,用逗号分开;
关于使用Memory Based Realm组件设置container managed security的更多信息,参考FIXME
- Nested pointer into HOW-TO
相关推荐
- 配置`context.xml`或`server.xml`中的 Realm 组件进行身份验证和授权。 - 更新`conf/web.xml`以定义安全约束和登录配置。 7. **性能优化**: - 调整`conf/server.xml`中的线程池设置(Executor)以优化并发...
- 安全管理:使用Tomcat的 Realm组件进行用户认证和授权,可以通过web.xml配置安全约束。 5. **Tomcat与Apache HTTP Server集成** 对于需要更高级功能,如负载均衡、SSL处理和静态内容服务的场景,可以将Tomcat与...
Tomcat提供了基本的安全管理功能,如用户认证(通过 Realm 配置)和角色授权。它还支持SSL/TLS协议,可以通过修改server.xml配置文件来启用HTTPS连接。 **运行与调试:** 在解压后的目录下,找到`bin`目录,运行`...
在本压缩包中,你将找到所有必要的组件来配置和运行Apache Tomcat 7.0.94。 1. **Java Servlet**:Java Servlet是一种Java编程技术,用于扩展服务器的功能,它可以接收并响应来自Web客户端的请求。Tomcat作为...
7. **安全管理**:Tomcat允许配置 Realm 来进行用户身份验证,如`conf/tomcat-users.xml`,并可以通过`web.xml`定义角色和安全约束。 8. **集群与负载均衡**:Tomcat 6.0支持集群配置,通过复制会话数据实现多台...
另外,Tomcat还可以与其他Java EE组件如JNDI(Java命名和目录接口)和JMS(Java消息服务)集成,以实现更复杂的应用场景。 总的来说,Apache Tomcat 8.0.35是一个功能强大且易于使用的Web应用服务器,尤其适合初学...
5. **安全配置**:`server.xml`文件中可以配置连接器、 Realm(认证机制)以及角色和权限,以实现安全性管理。 6. **性能优化**:Tomcat可以通过调整`server.xml`中的各种参数来优化性能,例如线程池大小、连接超时...
Tomcat作为Servlet和JSP容器,负责加载、执行并管理这些组件。 2. **Apache Tomcat架构** Tomcat的架构基于服务器-客户端模型。主要包括以下几个组件:Catalina(核心Servlet容器)、Apr(Apache Portable Runtime...
6. **可扩展性**:Tomcat允许添加自定义Valves(请求处理组件)、Connectors(连接器)和Realm(认证模块),以满足特定的需求或集成其他系统。 7. **文档齐全**:Apache Tomcat提供了详尽的官方文档,包括安装指南...
此外,还可以通过Realm组件实现用户认证和授权。 9. **Demo应用**: 提供的源代码中可能包含了几个小的示例应用,这些应用展示了Tomcat的基本功能和配置方法,可以帮助开发者快速上手。 学习Apache Tomcat源代码...
Apache Tomcat是一款开源的Java Servlet容器,主要用于部署和运行Java Web应用程序。...这个压缩包包含了运行Tomcat所需的所有组件,通过简单的配置和管理,用户可以快速地在本地建立一个可靠的开发或测试环境。
Tomcat支持多种安全机制,如SSL/TLS加密、 Realm(认证域)实现用户身份验证和角色授权,这些都在源码中有所体现。 7. **国际化与本地化**: Tomcat允许应用支持多种语言,通过Locale和Resource Bundle来实现。...
5. **安全性**: 通过Realm组件提供身份验证和授权,支持多种认证机制,如文件系统、数据库等。此外,Tomcat 7增强了SSL/TLS配置,提供了更高级别的数据传输安全。 6. **热部署**: 在开发过程中,Tomcat支持无需重启...
1. **Catalina**:这是Tomcat的核心组件,负责管理Web应用程序,包括加载、部署、启动和停止应用。`org.apache.catalina`包下包含了大部分核心类,如`Engine`(顶层容器)、`Host`(虚拟主机)、`Context`(Web应用...
6. **安全性**:Tomcat提供基于角色的访问控制(RBAC)以及SSL/TLS支持,通过修改server.xml的<Realm>和<Security-constraint>元素来实现。 7. **JMX(Java Management Extensions)**:Tomcat 7.0.50支持JMX,允许...
在"apache-tomcat-7.0.81-src"这个压缩包中,你将获得Tomcat 7.0.81版本的完整源代码,这包括了服务器的所有核心组件和模块。通过分析这些源码,我们可以学习到以下关键知识点: 1. **Servlet容器**:Tomcat作为...
Apache Tomcat通常包含以下几个主要组件: - **bin**: 包含启动和停止Tomcat的脚本,如`catalina.sh`或`catalina.bat`。 - **conf**: 存储服务器配置文件,如`server.xml`、`web.xml`和`context.xml`。 - **lib*...
- **Catalina**: 这是Tomcat的主要组件,实现了Servlet容器的功能,处理Servlet和JSP的生命周期。 - **Coyote**: 提供了处理HTTP请求和响应的实现,包括连接器(Connector)和处理器(Processor)。 - **Jasper**: ...
3. **Java EE标准**:虽然Tomcat不完全实现Java EE(现在称为Jakarta EE)的全部规范,但它实现了核心的Web Profile,这包括Servlet、JSP和WebSocket等关键组件。 4. **配置管理**:Tomcat的配置主要通过`conf`目录...
这个文件夹包含了Tomcat的所有必要组件,包括启动脚本、配置文件、Web应用程序目录(webapps)、日志文件(logs)、临时文件(temp)以及工作目录(work)。其中,`conf`目录下的`server.xml`文件是Tomcat的主要配置...