我正在尝试用POST方法对我的Spring控制器/Action进行ajax调用,并用@ResponseBody从服务器返回一个对象。奇怪的是,在添加了Spring Security层之后,它就停止工作了,之前一切都正常工作。我将试着解释我的解决问题的方法,然后向您展示代码/捕获/等等。
1.经过一些研究,我找到了一些答案,说明这个问题可能与csrf机制有关,所以我禁用了它,仍然存在这个问题。(spring-security.xml)
2.我做了一个wireshark捕获来检查请求/响应。我的ajax请求是OK,我的控制器声明是OK,但是我不明白为什么,405响应指示>ALLOW:GET(capture bellow)
3.我尝试通过浏览器访问我的控制器操作(即,发出一个GET请求),我得到错误HTTP状态405-请求方法'GET'不受支持!
4.我尝试更改RequestMapping(方法...)对于RequestMethod.GET,请求到达控制器并正常工作,但我不希望它在GET方法上工作,我希望一个POST请求。
5.更改了RequestMapping(消耗、生成、标头)以接受所有类型的数据,但仍然是405...
这快把我逼疯了!我把我的文件贴在下面,所以你们可以查一下,伙计们,任何提示都将不胜感激。谢谢!(重要提示:这是我的绝望配置)
spring-security.xml
<beans:beans
xmlns...(all needed declarations)>
<http pattern="/js/**" security="none" />
<http pattern="/css/**" security="none" />
<!-- enable use-expressions -->
<http auto-config="true" >
<access-denied-handler error-page="/403" />
<intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/login" access="isAnonymous()" />
<intercept-url pattern="/403" access="permitAll" />
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
<form-login login-page="/login"
username-parameter="email"
password-parameter="password"
authentication-failure-url="/login?failed" />
<!--
<csrf/>
-->
</http>
..... (authentication)
@Controller
@RequestMapping("/admin**")
public class AdminController {
... (all my autowired beans)
@RequestMapping(
value = "/events/loadEvents",
method = RequestMethod.POST,
consumes = MediaType.ALL_VALUE,
produces = MediaType.ALL_VALUE,
headers = "Accept=*/*")
@ResponseBody
public Event loadEvents(@RequestParam("parentId") long parentId) {
... (my logic)
return event;
}
}
$.ajax({
type: 'POST',
cache: false,
url: /admin/events/loadEvents,
data: { parentId: 1 },
dataType = 'json',
contentType = 'application/json',
...
});
经过许多小时的研究和测试,我终于得到了它,蚂蚁这是一个(非常非常)愚蠢的情况。所以,在我的问题中我说
所以我禁用了它(spring-security.xml上的csrf),但仍然存在这个问题。
不,我没有禁用它。我想让它停用
<!--
<csrf/>
-->
<csrf disabled="true"/>
<script type="text/javascript">
var csrfParameter = '${_csrf.parameterName}';
var csrfToken = '${_csrf.token}';
</script>
var jsonParams = {};
jsonParams['parentId'] = 1;
jsonParams[csrfParameter] = csrfToken;
$.ajax({
type: 'POST',
cache: false,
url: /admin/events/loadEvents,
data: jsonParams,
dataType = 'json',
contentType = 'application/json',
...
});
像个魅力女神一样工作。希望这对将来的人有所帮助。
我有一个非常简单的Spring引导应用程序,它由以下代码保护: 这个想法是为了保护“admin”部分。它公开了一个RESTAPI。问题是所有的帖子都被退回了 405方法不允许 如果我从应用程序中删除安全启动器,它就会工作。这让我相信安全配置是问题所在。但我不知道怎么做。
问题内容: 我正在开发flask注册表格,但收到错误消息: 码: registration.html: 当我访问时,我收到错误消息。我究竟做错了什么? 问题答案: 这是因为在定义路由时仅允许POST请求。 当你在浏览器中访问时,它将首先执行GET请求。只有提交表单后,浏览器才会执行POST。因此,对于像你这样的自我提交表单,你需要同时处理两者。 使用 应该管用。
问题内容: 我打算使用Ajax将跨域请求发送到soap Web服务。Web服务的URL是:http://example1.asmx?op = GetVOD 我的代码: 在IIS 7服务器端,我已经将这些行添加到文件web.config中 当我在Chrome上运行客户端代码时,出现405错误: 有谁知道如何解决这个问题? 预先感谢 问题答案: 听起来像Web DAV正在阻碍。这是删除它的配置: ht
我正在尝试使用angularJs和$http发布一个表单。post方法。但每当我执行此函数时,它都会给我以下错误:加载资源失败:服务器响应状态为405(不允许使用方法),我不知道该怎么办。(Im使用visual studio 2015)
我有一个jquery脚本(从github下载),可以删除实体。下面是脚本。 }); 而我就是这样利用它的 相应的laravel路线如下所示 然而,当我尝试按下X(删除按钮)时,我得到了405方法不允许的错误。错误如下 这在我的本地沙箱上运行良好。 任何帮助都将不胜感激。 谢啦
我试图用jQuery做一个POST请求,但是我得到了一个错误405(不允许使用方法),我正在使用Laravel 5 这是我的代码: jQuery 超文本标记语言 控制器 JQuery错误http://localhost/laravel5.1/public/empresas/eliminar/5405(不允许方法)。 url值为 数据值是 如果我更改为request它工作正常,但我想做一个post请