AJAX请求返回403(禁止)错误

AJAX请求返回403(禁止)错误,ajax,spring,spring-mvc,spring-security,Ajax,Spring,Spring Mvc,Spring Security,对本地主机的Ajax请求返回403错误。但是,当我更改controller requestMethod以获取并在浏览器上打开请求“url”时,它会显示从服务器返回的json数据。我希望使用这些数据填充一个下拉列表。请帮忙。我正在使用SpringSecurity4.0和SpringMVC框架。CSRF未禁用。此外,url在spring中是安全的 我在这里查看了相关问题,但没有找到对我有帮助的解决方案。我找到了一条出路: 我将AJAX调用及其控制器的请求方法从POST更改为GET并获得请求的200-

对本地主机的Ajax请求返回403错误。但是,当我更改controller requestMethod以获取并在浏览器上打开请求“url”时,它会显示从服务器返回的json数据。我希望使用这些数据填充一个下拉列表。请帮忙。我正在使用SpringSecurity4.0和SpringMVC框架。CSRF未禁用。此外,url在spring中是安全的

我在这里查看了相关问题,但没有找到对我有帮助的解决方案。

我找到了一条出路: 我将AJAX调用及其控制器的请求方法从POST更改为GET并获得请求的200-OK状态。此外,当我在登录到web应用程序的浏览器上打开AJAX请求“URL”时,它会显示JSON数据。然而,当我在未登录的浏览器上打开时,Spring security会请求我的登录-我猜是完美的

从安全的角度来看,这个操作行吗?

我找到了一个解决方法: 我将AJAX调用及其控制器的请求方法从POST更改为GET并获得请求的200-OK状态。此外,当我在登录到web应用程序的浏览器上打开AJAX请求“URL”时,它会显示JSON数据。然而,当我在未登录的浏览器上打开时,Spring security会请求我的登录-我猜是完美的


请从安全角度看,此操作是否正常?

您收到403是因为以下原因之一:

  • 您的控制器不接受POST呼叫
  • 您没有在ajax post调用中提交CSRF
  • 您从ajax发出的调用不正确
对于上述各项:

  • 确保控制器接受POST呼叫
  • 确保您的ajax POST调用也在提交CSRF
  • 确保根据需求使用正确的调用类型(数据检索应该是GET,创建应该是POST,修改应该是PUT,删除应该是DELETE),查看restful最佳实践指南

您提供的答案无法帮助您了解问题所在,因此您将面临更多此类问题,这些问题将很难排除。

您收到403的原因如下:

  • 您的控制器不接受POST呼叫
  • 您没有在ajax post调用中提交CSRF
  • 您从ajax发出的调用不正确
对于上述各项:

  • 确保控制器接受POST呼叫
  • 确保您的ajax POST调用也在提交CSRF
  • 确保根据需求使用正确的调用类型(数据检索应该是GET,创建应该是POST,修改应该是PUT,删除应该是DELETE),查看restful最佳实践指南

您提供的答案无法帮助您了解问题所在,因此您将面临更多此类问题,这些问题很难解决。

请添加导致错误的代码。@J.Titus它在脚本或spring/Java代码级别上没有显示任何错误。我在浏览器控制台上检查并看到请求状态为禁止。然后我在浏览器上打开请求url,看到数据正常地从服务器返回。我说的是403错误。您的AJAX调用是什么样子的?您可以转到
http://localhost:8080/myapp/getCategories
在浏览器中并获取数据,告诉我
get
request正在工作。为什么在您的AJAX请求中将其设置为
POST
?@EdwardoS愚蠢的问题,但您的控制器是否接受POST请求,并且您是否也通过CSRF发送您的AJAX POST呼叫?请向我们显示您的控制器代码以及导致错误的代码。@J.Titus在脚本或spring/Java代码的级别。我在浏览器控制台检查,发现请求状态为禁止。然后我在浏览器上打开请求url,发现数据正常从服务器返回。我说的是403错误。您的AJAX调用看起来像什么?您可以转到
http://localhost:8080/myapp/getCategorie浏览器中的s
并获取数据告诉我,
get
请求正在工作。为什么在AJAX请求中将其设置为
POST
?@EdwardoS愚蠢的问题,但是您的控制器是否接受POST请求,并且您是否也通过CSRF发送AJAX POST调用?请向我们展示您的控制器代码根据你的使用情况,我会给你一个答案,你可以在你的代码中看到问题,因为我可以根据你的使用情况,给你一个答案,你可以在你的代码中看到问题,因为我可以在你的代码中看到问题谢谢你的启发。这很有帮助!谢谢你的启发是的,这很有帮助!