Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带Tomcat 7的Spring:PUT请求返回403,原因很奇怪_Java_Spring_Tomcat - Fatal编程技术网

Java 带Tomcat 7的Spring: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) 我还实现了一个过滤器,该过滤器不包括所有请求,在过滤器存在之前,我可以验证我从链的其余部分获得了预期的状态

我有一个在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.
    
    我错过了什么

    谢谢

  • 首先检查CORS过滤器配置,正如Andreas所说:
  • 也可以查看此流程图
  • 最后看看这篇文章

  • path变量值为bookId,但url使用{book};两者应该匹配。尝试将url更改为“/{bookId}”,或将路径变量更改为@PathVariable(value=“book”)。了解您正在呼叫以帮助分析问题的URL可能会很有用。

    您是否启用了CSRF保护?我不知道。为了进行测试,我使用了maven tomcat插件。我怎样才能查出来?这能回答你的问题吗?这也可能是因为它无法访问的“受保护”关键字。尝试转到publicAndreas,此链接涉及管理者保护。这不是我的情况。公开这种方法也不起作用。这很奇怪,因为当在主体中传递有效的Book对象时,它会起作用。但是当在正文中传递一个无效的JSON时,我希望我的验证器返回400,但是Tomcat返回403。谢谢你的回答。似乎所有这些都与CORS无关。没有原始标题。此外,当请求主体是有效的JSON时,PUT请求返回OK。当输入无效时,问题开始出现。