水平scalling时创建会话无状态使用

时间:2016-10-03 22:14:20

标签: spring rest spring-security spring-boot stateless

我想创建一个RESTful API,我需要它是无状态的,因为我可能会启动N次应用程序。

我还添加了带有jdbc实现的OAuth2,用户应该登录一次,所有查询都应该是无状态的。

在我的春季启动应用程序中添加以下内容会导致它现在尝试进行两次身份验证的登录崩溃。

    http
        .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS);

在服务器端,我有这些日志:

AuditEvent [timestamp=Tue Oct 04 05:04:52 ICT 2016, principal=dka, type=AUTHENTICATION_SUCCESS, data={details=org.springframework.security.web.authentication.WebAuthenticationDetails@b364: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: null}]
AuditEvent [timestamp=Tue Oct 04 05:04:52 ICT 2016, principal=anonymousUser, type=AUTHORIZATION_FAILURE, data={details=org.springframework.security.web.authentication.WebAuthenticationDetails@b364: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: null, type=org.springframework.security.access.AccessDeniedException, message=Access is denied}]
  • 这是关于我的OAuth身份验证还是仅涉及WebSecurity部分?
  • 有没有一种很好的方法来配置我的会话以扩展它并保持服务无状态?

1 个答案:

答案 0 :(得分:0)

看起来您的第二个请求不包含任何授权标头,或者Spring安全性未对其进行评估。

根据OAuth Bearer Type Documentation,您的客户需要提交标头:Authorization: Bearer YOUR_TOKEN,而令牌是您的访问令牌响应之一(请参阅Example Access Token Response

如果这不能解决您的问题,请考虑添加一些日志&您的配置代码。