这可能是一些"菜鸟"问题,但我在研究期间无法找到直接的答案。
使用JAVA Web项目(使用SSO),有一些库通过以下方式获取登录用户:" request.getUserPrincipal();"。
我很惊讶,收到了关于请求的这些数据,因为可以强制执行(我的第一个假设是请求来自webclient /浏览器)。
但是检查正在运行的应用程序,我没有看到数据在请求中传播的单个位置(超过登录页面本身,当然会发送用户名和密码)。
所以,我假设服务器正在扩充请求并将实际存储在会话中的用户信息(这将是安全的),但我找不到支持我的任何明确文档理论
那么,有人可以向我解释或指出一些好的和直接的解释吗?
谢谢!问候。
答案 0 :(得分:1)
HttpServletRequest#getUserPrincipal()
的JavaDoc说:
返回包含当前经过身份验证的用户名的java.security.Principal对象。如果用户尚未通过身份验证,则该方法返回null。
你是对的,它没有直接说明这些信息的来源。实际上,可能存在身份验证和相应Principal
对象来自的不同来源。
文档定义了一种合同,如果存在身份验证,则返回对象,如果不存在身份验证,则返回null
。
大多数情况下,这与会话结合使用,但很容易实现不使用HttpSession
的SSO实现,但基于例如在每个HTTP请求中存在JWT令牌。