身份验证机制(authentication):
确定一个用户具有自己声称的那个身份
应用程序关心用户是否通过了验证而不关心是通过何种方式进行的验证???
授权(访问控制:authorization):★坚持使用<security-role>来声明所有角色
用户信息的提供:
首选由容器提供的身份验证:(具有静态特征;效率?)
a.HTTP基本身份验证(BASIC):usr/pwd通过Base64编码后加入某个请求首部
b.HTTP摘要身份验证(DIGEST):(HTTP1.1支持)服务器端验证客户端发来的MD5摘要(包括服务器端发来的含有时间戳、请求资源、服务器标识的nonce)
c.HTTPS客户身份验证(CLIENT-CERT):要求客户端的SSL
d.基于表单的身份验证(FORM):servlet规范独有,由servlet容器自身来实现,明文传输(具体实现依赖<login-config>元素中<form-login-config>的设置)
访问控制类型由Web应用程序配置描述符中定义(属于servlet规范):/WEB-INF/web.xml
用户信息的获取:request对象提供方法获得验证后的用户信息(Servlet 2.2 API)
应用程序控制的身份验证:(动态的验证模型),口令仍以明文传送
自定义行为<oar:validateSession name="xxx" loginPage="login.jsp" errorMsg="xxx" />必须被放在应用程序中所有受保护页面的开始:
包括3个必需属性:name 由验证页面创建的Bean对象的名称
login 找不到该对象名称时的转发URL
errorMsg 在转发的URL页面上显示的消息
作为POST请求对象的带有访问控制的页面需要对POST方法进行验证:
<% if (!request.getMethod().equals("POST")) { %>
<ora:redirect page="main.jsp" />
<% } %>
避免用户重新提交过期表单
使用HTTPS验证将使其他三种认证失效:无论是只对服务器进行认证还是对客户端和服务器端都进行认证,连接都是经过加密的
对于cookie的处理:
<ora:addCookie maxAge="2592000"/>表示cookie保存30天(30*24*3600s)
<ora:addCookie maxAge="0"/>表示cookie立即失效
配置Tomcat-users.xml
该文件包含了所有Tomcat服务器的注册用户,其中有role(角色)、user(用户)两种信息。下面列举出这个XML文件的部分内容。
<?xml version='1.0' encoding='utf-8'?> <Tomcat-users> <role rolename="Tomcat"/> <user username="Tomcat" password="Tomcat" roles="Tomcat,admin"/> </Tomcat-users> |
1.role参数
Tomcat中保存了一些用户权限,也就是角色,比如admin、Tomcat等。用户还可以自定义,通过""来注册一个角色。它只有rolename一个属性,通过这个属性可以把用户的权限进行分配。
2.User参数
这个数据项中包含了诸如用户名、用户密码、用户权限、用户说明等数据属性。通过下面的这个例子讲解。
<user username="wudi" password="wudi" fullName="test" roles="admin,manager,role1,Tomcat"/> |
这个语句建立了一个用户,用户名是"wudi",密码也是"wudi"。这个用户的全称是"test"。"wudi"这个用户拥有的权限是admin、manager、role1、Tomcat。这些用户权限是Tomcat系统默认的。在这里有一些需要声明,Tomcat的系统管理员必须有admin的用户权限,否则无法登陆Tomcat的管理界面。
auth-constraint:
web-resource-collention元素质出了哪些URL应该受到保护,auth-constraint元素指出哪些用户应该具有受保护资源的访问权。此元素应该包含一个或多个标识具有访问权限的用户类别role- name元素,以及包含(可选)一个描述角色的description元素。
<auth-constraint>
<role-name>administrator</role-name>
<role-name>kahuna</role-name>
</auth-constraint>
web-resource-collection:
此元素确定应该保护的资源。所有security-constraint元素都必须包含至少一个web-resource-collection项。此元素由一个给出任意标识名称的web-resource-name元素、一个确定应该保护的URL的url-pattern元素、一个指出此保护所适用的HTTP命令(GET、POST等,缺省为所有方法)的http-method元素和一个提供资料的可选description元素组成。例如,下面的Web-resource-collection项(在security-constratint元素内)指出Web应用的proprietary目录中所有文档应该受到保护。
<security-constraint>
<web-resource-collection>
<web-resource-name>Proprietary</web-resource-name>
<url-pattern>/propritary/*</url-pattern>
</web-resource-collection>
<!-- ... -->
</security-constraint>
With this constraint, the server allows only authenticated users with the roles admin and user to access the pages in the /ch13/search directory. Since we add a new role (user) for this constraint, we must add the corresponding <security-role> element.
<security-role>
<role-name>admin</role-name>
</security-role>
<security-role>
<role-name>user</role-name>
</security-role>