Java 带Tomcat 7的Spring:PUT请求返回403,原因很奇怪
我有一个在Spring3.1(非引导)上编写的web应用程序,它运行在Tomcat7上 我有一个@Controller实现方法放在某个URL上。 在某些情况下,当从邮递员发送PUT请求时,我得到的是403响应,而不是预期的响应 例如:Java 带Tomcat 7的Spring:PUT请求返回403,原因很奇怪,java,spring,tomcat,Java,Spring,Tomcat,我有一个在Spring3.1(非引导)上编写的web应用程序,它运行在Tomcat7上 我有一个@Controller实现方法放在某个URL上。 在某些情况下,当从邮递员发送PUT请求时,我得到的是403响应,而不是预期的响应 例如: 将请求发送到未实现的URL(在到达同一URL时,我得到404) 发送无效JSON作为请求正文(预期为400) 发送字符串而不是数字请求参数(预期为400) 我还实现了一个过滤器,该过滤器不包括所有请求,在过滤器存在之前,我可以验证我从链的其余部分获得了预期的状态
@RequestMapping(value = "/{book}", method = RequestMethod.PUT)
@ResponseStatus(HttpStatus.OK)
@ResponseBody
protected Book put(@PathVariable(value = "bookId") String id, @RequestBody @Valid Book book) {
return book; // just a stub
}
这是过滤器中的相关部分:
filterChain.doFilter(req, res);
// res.getStatus() is the expected status
return; // after this line I move to internal code of Tomcat which I cannot debug, but something happens there.
我错过了什么
谢谢
path变量值为bookId,但url使用{book};两者应该匹配。尝试将url更改为“/{bookId}”,或将路径变量更改为@PathVariable(value=“book”)。了解您正在呼叫以帮助分析问题的URL可能会很有用。您是否启用了CSRF保护?我不知道。为了进行测试,我使用了maven tomcat插件。我怎样才能查出来?这能回答你的问题吗?这也可能是因为它无法访问的“受保护”关键字。尝试转到publicAndreas,此链接涉及管理者保护。这不是我的情况。公开这种方法也不起作用。这很奇怪,因为当在主体中传递有效的Book对象时,它会起作用。但是当在正文中传递一个无效的JSON时,我希望我的验证器返回400,但是Tomcat返回403。谢谢你的回答。似乎所有这些都与CORS无关。没有原始标题。此外,当请求主体是有效的JSON时,PUT请求返回OK。当输入无效时,问题开始出现。