【问题标题】:Spring PostMapping return 401 without bodySpring PostMapping 没有正文返回 401
【发布时间】:2019-03-15 03:16:02
【问题描述】:

我想创建一个Post 来将一些数据写入数据库,但是所有需要的信息都存储在服务器上,所以我的Post 服务不需要正文:

@PostMapping("foo")
public @ResponseBody 
RestResponse writeFoo() {
    // WRITE AND RETURN
}

如果我尝试向此服务发出发布请求,即使我传递了有效令牌,我也会收到 401。如果我将公开的服务更改为GetMapping,所有工作都按预期进行。似乎我无法管理带有空正文的 Post 请求。

我尝试添加一些假参数作为

RestResponse writeFoo(@RequestBody(required = false) String fake)

但没有成功。

有什么想法吗?

【问题讨论】:

  • 401 状态 - 未经授权。检查您的安全配置,或禁用以进行测试。
  • 如果我使用 get 一切正常。我已经有各种邮政服务,一切都很好

标签: spring spring-mvc spring-boot spring-restcontroller spring-rest


【解决方案1】:

您解释的问题最常见的原因是配置错误(或缺失?)。

请注意,你的REST API默认允许使用GET方法,而你需要指定其他方法类型(即PUT和POST),否则由于CORS,它不会开箱即用。

GET 方法有效而 POST 方法无效的部分强烈暗示了缺少/不正确的 CORS 配置。您可以通过添加一些 CORS 过滤器并设置响应标头来快速修复它。

官方文档应该会给你一个好的开始,如果你不知道去哪里找:Spring docs - enabling CORS

更新:

问题已成功解决,请查看 cmets 部分了解更多信息。 小故事 - 在这种特殊情况下正确设置了 CORS/CSRF 令牌的后端配置,由于 web 应用程序的 angular/前端部分缺少标头(CSRF 令牌)而出现问题。

【讨论】:

  • 感谢您的回复,但我认为我的 CORS 配置良好。如果我从邮递员那里调用服务,也会出现此问题
  • 请在调试模式下启动您的 web 应用程序并放置断点以查看当您将请求方法设置为 POST 时是否到达此端点/方法。如果你不能,那么这是一个强烈的信号,表明你的过滤器/配置不允许你发出任何 POST 请求。
  • 不。这不可能是问题。我已经在这个应用程序中使用了一些发布请求,它们都可以正常工作
  • 更改安全日志级别,您可以查看拒绝您请求的人员和原因。添加到属性:logging.level.org.springframework.security=DEBUG
  • 谢谢,问题是我忘记导入 Angular 6 的 CSRF。我正在迁移我的前端项目,但我忘记了这一点。 borino 用日志属性更新你的答案,我会接受你的答案
猜你喜欢
  • 2018-04-26
  • 2022-11-13
  • 2018-11-06
  • 2020-07-24
  • 1970-01-01
  • 2015-07-07
  • 2018-09-07
  • 2020-05-05
  • 2021-11-18
相关资源
最近更新 更多