Spring MVC with Security& REST端点提供403"无法验证提供的CSRF令牌,因为找不到会话"

时间:2018-02-09 21:55:05

标签: rest spring-mvc spring-boot

我有一个Java Spring-boot微服务,我有一个管理员网站和REST端点。该网站可通过myserver.com/serverwebpages访问,REST网络服务位于myserver.com/api/restendpoints。我在网络端使用Spring MVC登录安全性和CSRF,在REST端点端使用HMAC授权。我在网站端有@Controller注释,在REST Web服务上有@RestController注释。该网站运行良好,网络服务与GET的工作正常。但是,我刚试了一个DELETE并得到了403,错误:禁止,消息:"无法验证提供的CSRF令牌,因为找不到会话"。看起来MVC安全性正在查看REST Web服务请求并调出CSRF错误,因为我没有提供CSRF编号。当然,我确实在网页端为CSRC提供了MVC跨脚本安全性。有人知道怎么修这个东西吗?我是否需要使用不同的端口创建单独的微服务?

2 个答案:

答案 0 :(得分:0)

当您调用DELETE方法时,它们需要CSRF令牌。也许您的DELETE API不带有CSRF令牌。您需要在Request Header中添加CSRF令牌。

在Header中添加CSRF取决于Ajax框架。如果你的组合是Spring-Security + Thymeleaf + jQuery,那么请参考Spring Security Document:
https://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html#csrf-include-csrf-token-ajax

答案 1 :(得分:0)

我无法找到使用Spring MVC解决问题的方法。所以我只是在同一个AWS实例上创建了两个独立的微服务。一个端口号为443的微服务处理Web服务并使用Spring MVC。端口8443的另一个微服务处理所有没有Spring MVC的REST API调用。这非常有效。失望,我找不到答案,但不得不继续前进。