Tomcat原理学习---安全

来源:互联网 发布:搞笑吐槽动漫 知乎 编辑:程序博客网 时间:2024/04/29 09:37
有些web应用程序的内容是有限制的,只允许有权限的用户在提供正确的用户名和密码的情况下才允许访问。Servlet通过配置部署文件web.xml来对安全性提供技术支持。本章的主要内容是容器对于安全性限制的支持。


域(Realm):
域是用于进行用户验证的一个组件,它可以告诉你一个用户名密码对是否是合法的。一个域跟一个上下文容器相联系,一个容器可以只有一个域。可以使用容器的setRealm方法来建立它们之间的联系。
一个域是如何验证一个用户的合法性的?一个域拥有所有的合法用户的密码或者是可以访问它们。至于它们存放在哪里则取决于域的实现。在 Tomcat的默认实现里,合法用户被存储在tomcat-users.xml文件里。但是可以使用域的其它实现来访问其它的源,如关系数据库。


GenericPrincipal :
一个GenericPrincipal必须跟一个域相关联,这个是通过构造函数实现的。
GenericPrincipal必须拥有一个用户名和一个密码,此外还可选择性的传递一列角色。可以使用hasRole方法来检查一个principal是否有一个特定的角色,传递的参数为角色的字符串表示形式。


LoginConfig 类 :
LoginConfig的实例封装了域名和验证要用的方法。可以使用LoginConfig实例的getRealmName方法来获得域名,可以使用getAuthName方法来验证用户。一个验证(authentication)的名字必须是下面的之一:BASIC, DIGEST, FORM, o或者CLIENT-CERT。如果用到的是基于表单(form)的验证,该LoginConfig对象还包括登录或者错误页面像对应的URL。


Tomcat一个部署启动的时候,先读取web.xml。如果web.xml包括一个login-confgi元素,Tomcat创建一LoginConfig对象并相应的设置它的属性。验证阀门调用LoginConfig的getRealmName 方法并将域名发送给浏览器显示登录表单。如果getRealmName名字返回值为null,则发送给浏览器服务器的名字和端口名


Authenticator 类 :
org.apache.catalina.Authenticator接口用来表示一个验证器。该方接口并没有方法,只是一个组件的标志器,这样就能使用instanceof来检查一个组件是否为验证器。 Catalina提供了Authenticator接口的基本实现:org.apache.catalina.authenticator.AuthenticatorBase类。除了实现Authenticator接口外,AuthenticatorBase 还继承了org.apache.catalina.valves.ValveBase类。这就是说AuthenticatorBase也是一个阀门。


可以在org.apache.catalina.authenticator包中找到该接口的几个类:
BasicAuthenticator用于基本验证, FormAuthenticator用于基于表单的验证, DigestAuthentication用于摘要(digest)验证, SSLAuthenticator用于SSL验证。NonLoginAuthenticator用于Tomcat没有指定验证元素的时候。NonLoginAuthenticator类表示只是检查安全限制的验证器,但是不进行用户验证。


安装 Authenticator 阀门 :
在部署文件中,只能出现一个login-config 元素,login-config元素包括了auth-method元素用于定义验证方法。这也就是说一个上下文容器只能有一个LoginConfig对象来使用一个authentication 的实现类。 
AuthenticatorBase的子类在上下文中被用作验证阀门,这依赖于部署文件中auth-method元素的值
0 0
原创粉丝点击