request.getRemoteUser() 如何工作以及存储远程用户名值?
How the request.getRemoteUser() works and the remote username value is stored?
我的应用程序中有 tomcat 身份验证(表单身份验证),身份验证成功后,我可以通过 servlet.where 中的 request.getRemoteUser() 方法获取用户名 我可以找到request.getRemoteUser() 代码 ?这是怎么回事?已设置和存储 RemoteUser 的位置。由于 http 请求是无状态的并且独立执行,这如何在所有后续请求中提供用户名??
为了处理身份验证,Tomcat中的每个上下文都有一个Valve
that extends AuthenticatorBase
,即:
- 尝试使用
HttpServletRequest
、 中的数据对用户进行身份验证
- 检查 URL、
的授权要求
- 如果需要身份验证但不存在,则向浏览器发送适当的响应,请求身份验证。对于大多数身份验证方法,这通常意味着
401
响应带有 WWW-Authenticate
header 或 302
重定向到登录页面以进行表单身份验证。
- 如果存在身份验证,但访问未获授权,它会发送
403
响应。
- 否则调用
Request#setUserPrincipal
并继续下一个阀门。
有关详细信息,请查看 AuthenticatorBase#invoke
方法。
大部分认证方式都是基于浏览器发送的Authorization
header(表单认证器使用请求参数)。
如果存在 session(例如,您调用了 HttpServletRequest#getSession
),经过身份验证的用户将缓存在 session 中,后续请求将不再需要进行身份验证。您可以使用验证器阀门上的 alwaysUseSession
属性强制创建 session(参见 documentation)。服务器可以通过多种方法识别先前建立的session的存在:
- A
JSESSIONID
Cookie
header 在请求中,
- 一个
jsessionid
路径参数在URL,
- 如果您使用 TLS,TLS session 也可用于检测适当的 HTTP session。
我的应用程序中有 tomcat 身份验证(表单身份验证),身份验证成功后,我可以通过 servlet.where 中的 request.getRemoteUser() 方法获取用户名 我可以找到request.getRemoteUser() 代码 ?这是怎么回事?已设置和存储 RemoteUser 的位置。由于 http 请求是无状态的并且独立执行,这如何在所有后续请求中提供用户名??
为了处理身份验证,Tomcat中的每个上下文都有一个Valve
that extends AuthenticatorBase
,即:
- 尝试使用
HttpServletRequest
、 中的数据对用户进行身份验证
- 检查 URL、 的授权要求
- 如果需要身份验证但不存在,则向浏览器发送适当的响应,请求身份验证。对于大多数身份验证方法,这通常意味着
401
响应带有WWW-Authenticate
header 或302
重定向到登录页面以进行表单身份验证。 - 如果存在身份验证,但访问未获授权,它会发送
403
响应。 - 否则调用
Request#setUserPrincipal
并继续下一个阀门。
有关详细信息,请查看 AuthenticatorBase#invoke
方法。
大部分认证方式都是基于浏览器发送的Authorization
header(表单认证器使用请求参数)。
如果存在 session(例如,您调用了 HttpServletRequest#getSession
),经过身份验证的用户将缓存在 session 中,后续请求将不再需要进行身份验证。您可以使用验证器阀门上的 alwaysUseSession
属性强制创建 session(参见 documentation)。服务器可以通过多种方法识别先前建立的session的存在:
- A
JSESSIONID
Cookie
header 在请求中, - 一个
jsessionid
路径参数在URL, - 如果您使用 TLS,TLS session 也可用于检测适当的 HTTP session。