Tomcat如何实现资源安全管理

简介: 在了解了认证模式及Realm域后,我们看看Tomcat是如何设计实现资源安全管理的。在认证模式上,必须要支持多种认证模式,包括Basic模式、Digest模式、Form模式、Spnego模式、SSL模式及NonLogin模式。

在了解了认证模式及Realm域后,我们看看Tomcat是如何设计实现资源安全管理的。在认证模式上,必须要支持多种认证模式,包括Basic模式、Digest模式、Form模式、Spnego模式、SSL模式及NonLogin模式。如何实现这些认证模式比较优雅,或者说比较清晰?看下图,在tomcat中一个请求从浏览器发送过来后,请求接收后会流向四个级别容器处理,即Engine->Host->Context->Wrapper,而且是以管道阀门(pipelinevalve)形式进行处理,只需往某个容器中添加一个阀门valve用于认证处理,由于要支持每个应用都可以有各自的认证机制,所以这个容器级别应该选为Context

 

针对每种认证模式建立不同的认证器,例如Basic模式对应BasicAuthenticatorSSL模式对应SSLAuthenticator等等,这些认证器都要实现valve接口以便被Context的管道调用。认证器主要负责通过认证协议与客户端交互,收集用户的凭证信息并进行认证鉴权工作。所以这整个认证过程包含了两大步骤,一是收集用户凭证信息,另一个是对凭证鉴权,收集凭证其实就是用不同的协议约定让客户端协助收集,例如HTTP Basic协议。而对凭证的鉴权工作又是如何设计的?

    鉴权工作主要是通过客户端用户名和密码找出相应的权限,然后根据查询出来的权限检查是否可以请求相应资源。正如下图,web层对应Context容器级别,所以在web应用中web.xml配置文件配置的权限信息会被加载到Context容器中,例如role1对应url1role2对应url2url3。除此之外,它还需要查询用户权限模块,这块就交由realm完成,realm抽象了用户与角色关系的一层。客户端传输过来用户名和密码后,xxxAuthenticator认证器通过realm获取到该用户的角色,然后判断是否有请求资源的权限,假如user1正在访问url1,通过user1pwd1查出来的权限为role1,有url1权限则返回该资源。

 

    Tomcat资源安全管理的实现思路很清晰,通过不同认证协议让客户端输入身份信息,接收到身份信息后则通过realm模块和web.xml权限配置共同判断是否返回正在请求的资源。


点击订购作者《Tomcat内核设计剖析》



目录
相关文章
|
Web App开发 Java 应用服务中间件
|
关系型数据库 Java 数据库连接
|
关系型数据库 Shell 应用服务中间件
|
Web App开发 测试技术 应用服务中间件
Tomcat启动时项目重复加载,导致资源初始化两次的问题
最近在项目开发测试的时候,发现Tomcat启动时项目重复加载,导致资源初始化两次的问题  导致该问题的原因: 如下图:在Eclipse中将Server Locations设置为“Use Tomcat installation(takes control of Tomcat installation)”时, 就会导致该问题! 根本原因: 解决方法一: 把server.
827 0
|
1月前
|
XML 应用服务中间件 Apache
Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的。
Tomcat AJP连接器配置secretRequired=“true“,但是属性secret确实空或者空字符串,这样的组合是无效的。
|
4月前
|
Java 应用服务中间件 Maven
Maven - 两种Tomcat插件的配置
Maven - 两种Tomcat插件的配置
137 0
|
17天前
|
前端开发 Java 应用服务中间件
Springboot对MVC、tomcat扩展配置
Springboot对MVC、tomcat扩展配置
|
4月前
|
Java 应用服务中间件 容器
SpringBoot配置外部Tomcat并打war包
SpringBoot配置外部Tomcat并打war包
70 0
|
2天前
|
IDE JavaScript Java
如何配置tomcat
【4月更文挑战第15天】如何配置tomcat
11 2
|
10天前
|
运维 Java 应用服务中间件
Tomcat详解(七)——Tomcat使用https配置实战
Tomcat详解(七)——Tomcat使用https配置实战
26 4