您是否可以将Spring Security与REST服务一起使用而不使其成为无状态?

时间:2017-08-14 02:31:06

标签: java spring rest spring-security

根据文件, https://docs.spring.io/spring-security/site/docs/3.0.x/reference/technical-overview.html。 我打算在我的Web应用程序中使用Spring Security调用一些REST Web服务,是否有必要将SessionCreationPloicy设置为STATELESS,如下例所示, https://github.com/spring-projects/spring-boot/issues/2755。 Spring Security在请求之间存储SecurityContext(Session),但我们知道REST是无状态的并且不使用HTTP会话。

将Spring Security与调用REST Web服务的应用程序一起使用而不将其设置为无状态会有什么问题?

1 个答案:

答案 0 :(得分:3)

应为性能/可伸缩性设置REST服务无状态。如果没有将安全链设置为无状态,Spring Security和servlet容器可能会创建一个会话。如果客户端在下一个请求中未使用此会话,则将创建另一个会话。第三个请求第三个会话,依此类推。服务器将跟踪会话,直到超时(约30分钟)。如果有很多请求,这可能/将成为服务器的负担。

我见过没有设置无状态的示例,它们适用于流量较低或者会话被重用,但我建议明确将REST服务设置为无状态,原因如上所述。

另一个问题可能是REST通常禁用 CSRF 保护。通过允许创建会话,系统可能容易受到CSRF攻击。