Servlet 安全性方法

authenticate、login、logout、getRemoteUser、isUserInRole 和 getAuthType servlet 安全性方法是 javax.servlet.http.HttpServletRequest 接口的方法。

authenticate

注: authenticate、login 和 logout servlet 安全性方法是本发行版的 WebSphere® Application Server 中用于 Java™ Servlet 3.0 的新方法。

authenticate 方法通过使用为 servlet 上下文配置的 WebSphere Application Server 容器登录机制来认证用户。

authenticate 方法的语法如下所示:
boolean authenticate(HttpServletResponse response))
前面的示例使用以下元素:
response
与 HttpServletRequest 相关联的 HttpServletResponse。

如果建立了认证或认证成功,那么 authenticate 方法返回 true

如果未完成认证并且底层的登录机制已在响应中落实了要返回给用户的消息和 HTTP 状态码,那么 authenticate 方法返回 false

如果写入响应时发生错误,那么将发生 java.io.IOException。

如果认证失败并且调用者负责处理错误(例如,底层的登录机制未建立要返回给用户的消息和 HTTP 状态码),那么将发生 ServletException。

避免故障 避免故障: 调用 authenticate 方法时,请了解下列事项:
  • WebSphere Application Server 将 HTTP 401 代码返回给客户机。
  • 该方法取决于为 servlet 上下文配置的 WebSphere Application Server 容器登录机制。例如,如果您为此 servlet 定义了表单登录,那么此登录将提示输入用户名和密码。客户机将用户标识和密码发送到 WebSphere Application Server 进行认证。
要点: 确保在使用新主体集调用另一个服务之前,authenticate 方法返回 true。例如:
Boolean authResultTrue = req.authenticate(response);
		if (!authResultTrue) {
	return;
} else {
	// Use the new invocation subject to call other services.
	      }			
 
gotcha

login

login 方法使用用户标识和密码向 WebSphere Application Server 对用户进行认证。如果认证成功,那么会在线程和轻量级第三方认证 (LTPA) cookie 上创建一个用户主体集(如果启用了单点登录 (SSO))。

login 方法的语法如下所示:
login(java.lang.String username, java.lang.String password)
前面的示例使用以下元素:
username
与用户的登录标识对应的字符串值。
password
用户的密码。

如果配置的登录机制不支持用户名和密码认证、已经认证了标识(在调用 login 之前)或验证提供的用户名和密码失败,那么将发生 ServletException。

注: 您可以将安全性定制属性 com.ibm.websphere.security.webAlwaysLogin 设置为 true,这样将使用用户名和密码向 WebSphere 应用程序进行认证,即使已经认证也是如此。

有关修改安全性定制属性的更多信息,请阅读“修改全局安全性配置或安全域配置中的现有定制属性”一文。

注: login 方法始终使用用户标识和密码向 WebSphere Application Server 进行认证,甚至还使用 HttpServletRequest 中提供的 SSO 信息。
避免故障 避免故障: authenticate 和 login 方法将调用主体集设置为新主体集。如果调用者主体集为 NULL,那么会将调用者主体集设置为新主体集。如果调用者主体集不为 NULL,那么不会将调用者主体集设置为新主体集。

因为 authenticate 和 login 方法将调用主体集设置为新主体集,所以将忽略部署描述符、安全性注释或动态注释中由 run-As 属性定义的 Run-As。

gotcha

logout

logout 方法使用户注销 WebSphere Application Server 并使 HTTP 会话失效。在此过程中,WebSphere Application Server 将完成下列过程:
  • 清除 LTPA cookie(如果启用了 SSO)
  • 使 HTTP 会话失效
  • 从认证高速缓存中移除用户
  • 从线程中移除用户主体集
  • 清除调用者和调用主体集
  • 将认证类型设置为 null

注销后,对受保护的 Web 资源进行访问将需要重新认证,并且 getUserPrincipal、getRemoteUser 和 getAuthType 方法将返回 null

logout 方法的语法如下所示:
logout()

如果注销失败,那么将发生 ServletException。

authenticate、login 和 logout 方法的审计事件类型

要审计 authenticate、login 和 logout 方法,必须创建或扩展某些审计事件类型文件。这些事件类型不是缺省事件类型文件的一部分。

表 1. 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
使用客户机证书认证时。
注:
对于 getRemoteUser 和 getAuthType 方法,返回的数据取决于在部署 servlet 的应用程序服务器中是否启用了安全性。存在下列可能性:
  • 如果启用了应用程序安全性并且 servlet 受保护,那么 getRemoteUser 方法返回登录信息,getAuthType 方法返回已配置的认证方案。
  • 如果未启用应用程序安全性,那么这两种方法都返回 null

指示主题类型的图标 参考主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=rsec_secgetru
文件名:rsec_secgetru.html