【发布时间】:2019-12-15 03:00:21
【问题描述】:
spring security如何维护请求之间的认证信息?
它是否使用任何类似于 jSessionId 的东西或使用完全不同的机制。
此外,我看到AbstractSecurityInterceptor(我的意思是它的任何实现)负责拦截传入的请求并验证请求是否已经使用Authentication.isAuthenticated() 授权,然后根据条件验证请求或将 Authentication 请求发送到 AuthenticationManager 实现。因此,换句话说,AbstractSecurityInterceptor 如何区分第一个请求和后续请求。
【问题讨论】:
-
这与 jsessionid cookie 有关,每个请求浏览器将最后一个作为 header parm 发送,然后服务器拦截它并检查它是否经过身份验证、授权或匿名会话(不是这个参数是 ID在服务器中创建会话对象)
-
spring如何保持jsessionid和userdetails之间的映射,哪些类处理这个映射功能。这正是我正在寻找的,因此我可以进一步了解这些课程。
-
当您登录时,在创建的会话中,安全上下文对象将存储在
SPRING_SECURITY_CONTEXT会话密钥中,因此所有安全信息(包括用户详细信息都将存储在那里)。 -
您也可以在没有会话和没有会话 cookie 的情况下工作,例如如果您使用 JWT。它是由身份提供者发行的令牌。客户端将 JWT 添加到每个请求的 HTTP 标头中。
-
好吧,jwt 是 gr8...它的有效负载捆绑了整个用户的角色/权限“来回”...所以安全上下文不必费心在内部存储角色...但是我试图理解的用例是基本身份验证......没有 JWT 或 OAuth(至少目前是这样。)
标签: spring spring-boot spring-security spring-session jsessionid