Servlet 安全性方法
authenticate、login、logout、getRemoteUser、isUserInRole 和 getAuthType servlet 安全性方法是 javax.servlet.http.HttpServletRequest 接口的方法。
authenticate
authenticate 方法通过使用为 servlet 上下文配置的 WebSphere Application Server 容器登录机制来认证用户。
boolean authenticate(HttpServletResponse response))
- response
- 与 HttpServletRequest 相关联的 HttpServletResponse。
如果建立了认证或认证成功,那么 authenticate 方法返回 true。
如果未完成认证并且底层的登录机制已在响应中落实了要返回给用户的消息和 HTTP 状态码,那么 authenticate 方法返回 false。
如果写入响应时发生错误,那么将发生 java.io.IOException。
如果认证失败并且调用者负责处理错误(例如,底层的登录机制未建立要返回给用户的消息和 HTTP 状态码),那么将发生 ServletException。

- WebSphere Application Server 将 HTTP 401 代码返回给客户机。
- 该方法取决于为 servlet 上下文配置的 WebSphere Application Server 容器登录机制。例如,如果您为此 servlet 定义了表单登录,那么此登录将提示输入用户名和密码。客户机将用户标识和密码发送到 WebSphere Application Server 进行认证。
Boolean authResultTrue = req.authenticate(response);
if (!authResultTrue) {
return;
} else {
// Use the new invocation subject to call other services.
}
login
login 方法使用用户标识和密码向 WebSphere Application Server 对用户进行认证。如果认证成功,那么会在线程和轻量级第三方认证 (LTPA) cookie 上创建一个用户主体集(如果启用了单点登录 (SSO))。
login(java.lang.String username, java.lang.String password)
- username
- 与用户的登录标识对应的字符串值。
- password
- 用户的密码。
如果配置的登录机制不支持用户名和密码认证、已经认证了标识(在调用 login 之前)或验证提供的用户名和密码失败,那么将发生 ServletException。
有关修改安全性定制属性的更多信息,请阅读“修改全局安全性配置或安全域配置中的现有定制属性”一文。

因为 authenticate 和 login 方法将调用主体集设置为新主体集,所以将忽略部署描述符、安全性注释或动态注释中由 run-As 属性定义的 Run-As。
gotchalogout
- 清除 LTPA cookie(如果启用了 SSO)
- 使 HTTP 会话失效
- 从认证高速缓存中移除用户
- 从线程中移除用户主体集
- 清除调用者和调用主体集
- 将认证类型设置为 null
注销后,对受保护的 Web 资源进行访问将需要重新认证,并且 getUserPrincipal、getRemoteUser 和 getAuthType 方法将返回 null。
logout()
如果注销失败,那么将发生 ServletException。
authenticate、login 和 logout 方法的审计事件类型
要审计 authenticate、login 和 logout 方法,必须创建或扩展某些审计事件类型文件。这些事件类型不是缺省事件类型文件的一部分。
方法 | 审计事件名称 | 事件的审计结果 |
---|---|---|
authenticate/login | SECURITY_AUTHN | SUCCESS 或 FAILURE |
logout | SECURITY_AUTHN_TERMINATE | SUCCESS |
logout | SECURITY_AUTHN_TERMINATE | FAILURE |
isUserInRole
(字符串角色名):如果授予远程用户指定的安全角色,返回 true。如果未授予远程用户指定的角色或者如果未认证任何用户,返回 false。
getRemoteUser
如果发出请求的用户已通过认证,那么 getRemoteUser 方法将返回该用户的登录信息。如果用户尚未通过认证,那么 getRemoteUser 方法返回 null。
getAuthType
getAuthType 方法返回用于保护 servlet 的认证方案的名称。如果 servlet 未受保护,那么 getAuthType 方法将返回 null。
- FORM
- 使用基于表单的认证时
- BASIC
- 使用基本认证时。
- CLIENT_CERT
- 使用客户机证书认证时。
- 如果启用了应用程序安全性并且 servlet 受保护,那么 getRemoteUser 方法返回登录信息,getAuthType 方法返回已配置的认证方案。
- 如果未启用应用程序安全性,那么这两种方法都返回 null。