我的应用程序中有Tomcat身份验证(表单身份验证),在成功的身份验证之后,我可以从servlet中的request.getRemoteUser()方法获得用户名。我在哪里可以找到request.getRemoteUser()代码?这是如何工作的?RemoteUser被设置和存储在哪里?由于HTTP请求是无状态的,并且独立执行,这是如何在所有后续请求中提供用户名的?
request.getRemoteUser()
mpbci0fu1#
为了处理身份验证,Tomcat中的每个上下文都有一个扩展AuthenticatorBase的Valve,即:1.尝试使用HttpServletRequest中的数据来验证用户,1.检查URL的授权要求,1.如果需要验证,但没有验证,则向浏览器发送适当的响应,请求验证。对于大多数验证方法,这通常意味着带有WWW-Authenticate头的401响应,或者对于表单验证,这通常意味着重定向到登录页的302。1.如果认证存在但访问未被授权,则它发送403响应。1.否则调用Request#setUserPrincipal并继续处理下一个阀。有关详细信息,请查看AuthenticatorBase#invoke方法。大多数身份验证方法都基于浏览器发送的Authorization标头(窗体身份验证器使用请求参数)。如果会话存在(例如,您调用了HttpServletRequest#getSession),经过身份验证的用户将被缓存在会话中,随后的请求将不再需要身份验证。您可以使用身份验证器阀门上的alwaysUseSession属性强制创建会话(参见文档)。服务器可以通过多种方法识别先前建立的会话的存在:1.一个JSESSIONIDCookie报头在请求、
AuthenticatorBase
Valve
HttpServletRequest
WWW-Authenticate
401
302
403
Request#setUserPrincipal
AuthenticatorBase#invoke
Authorization
HttpServletRequest#getSession
alwaysUseSession
JSESSIONID
Cookie
jsessionid
1条答案
按热度按时间mpbci0fu1#
为了处理身份验证,Tomcat中的每个上下文都有一个扩展
AuthenticatorBase
的Valve
,即:1.尝试使用
HttpServletRequest
中的数据来验证用户,1.检查URL的授权要求,
1.如果需要验证,但没有验证,则向浏览器发送适当的响应,请求验证。对于大多数验证方法,这通常意味着带有
WWW-Authenticate
头的401
响应,或者对于表单验证,这通常意味着重定向到登录页的302
。1.如果认证存在但访问未被授权,则它发送
403
响应。1.否则调用
Request#setUserPrincipal
并继续处理下一个阀。有关详细信息,请查看
AuthenticatorBase#invoke
方法。大多数身份验证方法都基于浏览器发送的
Authorization
标头(窗体身份验证器使用请求参数)。如果会话存在(例如,您调用了
HttpServletRequest#getSession
),经过身份验证的用户将被缓存在会话中,随后的请求将不再需要身份验证。您可以使用身份验证器阀门上的alwaysUseSession
属性强制创建会话(参见文档)。服务器可以通过多种方法识别先前建立的会话的存在:1.一个
JSESSIONID
Cookie
报头在请求、jsessionid
、1.如果您使用TLS,TLS会话也可用于检测相应的HTTP会话。