【发布时间】:2011-07-22 22:48:41
【问题描述】:
我的 Web 应用程序已开始在 PUT 请求上返回 403 错误。但是,我在日志中没有看到此请求的任何调试消息,所以我不知道如何进一步调试。
这段代码过去可以工作,但最近发生了一些变化: 客户端是 Sencha JS:
Ext.Ajax.request({
url : '/RestWAR/personal/trailSegment/' + trailSegment.id + '.json',
method : 'PUT',
headers : {'Content-Type': 'application/json'},
jsonData : segmentDto
});
容器是 Apache Tomcat 6.0。 该请求在转到 Spring 3.0.5 之前转到 Spring Security 3.0.0.RC1。
@Controller
@RequestMapping("/personal")
public class PersonalController {
@RequestMapping(value = "trailSegment/{trailSegmentId}", method=RequestMethod.PUT)
public void updateTrailSegment(@PathVariable long trailSegmentId, @RequestBody PersonalTrailSegmentDTO trailSegmentDto) {
//...
}
}
最近的变化: Spring 在 3.0.0.M4 上,json 库是 net.sf.json-lib 1.0.2。 Spring 现在是 3.0.5,json 库现在是 Jackson Mapper ASL 1.4.2(即 Spring 推荐的)。
GET 和 POST 工作正常。只是 PUT 失败了。
如果涉及 Spring Security,那么我会看到来自 Spring Security 的调试消息,但我什么也看不到。 Tomcat 似乎正在停止请求。
在此先感谢您的帮助 - 特别是在调试方面。
【问题讨论】:
-
为什么还在使用测试版的 Spring Security?
-
我很想看看是否有解决方案,我们使用 PUT 和 @RequestParam 对 Tomcat 6.0.x 和 Spring 3.0.1 进行了同样的处理(我想我们也尝试过 @RequestBody) ,PUT 可以在 Jetty 上正常工作,但不能在 Tomcat 上正常工作,除非您将参数作为 ?someParam=value 添加到 url。我们选择使用 POST 来绕过它。
-
我正在使用 beta 版本,因为我升级了 Spring 上一个版本,并且不想通过升级 Spring Security 来关闭太多。当我查看更改日志时,我没有看到任何有关的内容。我一定会在某个阶段解决这个问题。
标签: spring tomcat spring-security jackson