身份验证机制(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立即失效