tomcat getRemoteUser()是如何工作的以及远程用户名值是如何存储的?

bjg7j2ky  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(264)

我的应用程序中有Tomcat身份验证(表单身份验证),在成功的身份验证之后,我可以从servlet中的request.getRemoteUser()方法获得用户名。
我在哪里可以找到request.getRemoteUser()代码?这是如何工作的?RemoteUser被设置和存储在哪里?由于HTTP请求是无状态的,并且独立执行,这是如何在所有后续请求中提供用户名的?

mpbci0fu

mpbci0fu1#

为了处理身份验证,Tomcat中的每个上下文都有一个扩展AuthenticatorBaseValve,即:
1.尝试使用HttpServletRequest中的数据来验证用户,
1.检查URL的授权要求,
1.如果需要验证,但没有验证,则向浏览器发送适当的响应,请求验证。对于大多数验证方法,这通常意味着带有WWW-Authenticate头的401响应,或者对于表单验证,这通常意味着重定向到登录页的302
1.如果认证存在但访问未被授权,则它发送403响应。
1.否则调用Request#setUserPrincipal并继续处理下一个阀。
有关详细信息,请查看AuthenticatorBase#invoke方法。
大多数身份验证方法都基于浏览器发送的Authorization标头(窗体身份验证器使用请求参数)。
如果会话存在(例如,您调用了HttpServletRequest#getSession),经过身份验证的用户将被缓存在会话中,随后的请求将不再需要身份验证。您可以使用身份验证器阀门上的alwaysUseSession属性强制创建会话(参见文档)。服务器可以通过多种方法识别先前建立的会话的存在:
1.一个JSESSIONIDCookie报头在请求、

  1. URL中的路径参数jsessionid
    1.如果您使用TLS,TLS会话也可用于检测相应的HTTP会话。

相关问题