概述
有些web 应用程序的内容是有限制的,只允许有权限的用户在提供正确的用户名和密码的情况下才允许访问。
servlet 通过配置部署文件web.xml 来对安全性提供技术支持。
一个servlet 通过一个叫 authenticator 的阀门vavle 来支持安全性限制。
当容器启动的时候,authenticator 被添加到的容器的流水线上。
(域)Realm
域是用于进行用户验证的一个组件,它可以告诉你一个用户名密码是否合法。
一个域跟一个上下文容器相联系,一个容器可以只有一个域。
在catalina 中,一个域用接口org.apache.catalina.Realm 表示。
GenericPrincipal
一个principal 使用java.security.Principal 接口来表示。
一个GenericPrincipal 必须跟一个域相关联,主要是通过构造函数绑定关系。
GenericPrincipal 必须拥有一个用户名和一个密码,此外还可以选择性的传递一些角色。可以使用hasRole 方法来检查一个pricipal 是否有一个特定的角色。
LoginConfig 类
一个login configuration 包括一个域名,用org.apache.catalina.deploy.LoginConfig 类来表示。
LoginConfig 类封装了域名和验证要用的方法:
可以使用LoginConfig 实例的 getRealmName 方法来获得域名;
可以使用getAuthName 方法来验证用户。
Tomcat 在部署启动的时候,先读取web.xml .如果web.xml 包括一个login-config 元素,tomcat 创建一个LoginConfig对象并相应的设置它的属性。
Authenticator 类
Authenticator 用来表示真正的验证器。这个接口没有方法,只是一个组件的标志器。这样就能检测一个组件是否是验证器。
一个验证器的主要工作是验证用户。
安装 Authenticator 阀门
在部署文件中,只能出现一个login-config 元素,login-config 元素包括了auth-method 元素用于定义验证方法。
也就是说一个上下文容器只能有一个loginConfig 对象来说会用给一个authtication 的实现类。
auth-method的几种值:
- BASIC BasicAuthenticator
- FORM FormAuthenticator
- DIGEST DigestAuthenticator
- GLIENT-CERT SSLAuthenticator