java - 您可以在不使其无状态的情况下将 Spring Security 与 REST 服务一起使用吗?

标签 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 session 。

将 Spring Security 与调用 REST web 服务但未将其设置为无状态的应用程序一起使用会出现什么问题?

最佳答案

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

我见过没有设置无状态的示例,它们适用于低流量或重用 session ,但出于上述原因,我建议将 REST 服务显式设置为无状态。

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

关于java - 您可以在不使其无状态的情况下将 Spring Security 与 REST 服务一起使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45666700/

相关文章:

java - 如何修复 Spring Boot 中的 "Application failed to start"并要求定义 bean

java - Spring Data Pagination 使用 JSONView 不返回任何结果

c# - 如何在不使用 JsonFormatter 的情况下在 Json 中测试带有输入参数的帖子

java - 使用 oAuth - fatsecret API 向 REST API 发送请求

rest - 通过 RESTful API 或反向代理使用 SSL?

java - 使用 settings.xml 解决 sbt 的 java Artifact

java - 在 Tomcat 上运行时本地/远程调试 GWT 应用程序

java - android - ViewCompat setBackgroundTintList 在 API 21 中不起作用

java - OOM 错误 w/javadoc 插件 -Xmx 不起作用!

java - WEB-INF 文件夹未在 Spring Boot 应用程序中创建?