Spring响应ajax: 403错误
Spring response ajax: 403 error
我使用Spring java-config AbstractAnnotationConfigDispatcherServletInitializer而不是web.xml和我的Spring控制器代码:
@RequestMapping(value = "/demo1", method = RequestMethod.POST)
public @ResponseBody
String demo1(HttpServletRequest request, HttpServletResponse response) {
String poreqid = request.getParameter("poid");
String refid = request.getParameter("refid");
String status = request.getParameter("key");
String key = poreqid+ refid+ status;
return key;
}
}
当我发送post从jquery-ajax到spring控制器,jquery显示错误。jquery控制台:
XMLHttpRequest无法加载http://192.168.1.206:8082/project1/demo1。请求的资源上没有'Access-Control-Allow-Origin'标头。因此,不允许访问原点'null'。响应的HTTP状态码为403。
我添加了
@ComponentScan
public class CorsFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
// CORS "pre-flight" request
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
// response.addHeader("Access-Control-Allow-Headers", "Content-Type");
// response.addHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));
response.addHeader("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");
response.addHeader("Access-Control-Max-Age", "1");// 30 min
}
filterChain.doFilter(request, response);
}
}
我没有改变其余的代码,请提供我解决方案
您的域名localhost
和192.168.1.206
被认为是不同的来源,如果没有额外的设置,您不能从不同的来源发送ajax请求。
要在Spring MVC中启用跨源请求,你应该添加一个过滤器,通过在响应中应用适当的头来显式地允许请求的起源,这是这样的过滤器的一个例子
@Component
public class SimpleCORSFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
chain.doFilter(req, res);
}
public void init(FilterConfig filterConfig) {}
public void destroy() {}
}
和更多关于这个主题的阅读,你可以在这里找到
您可以删除@Component
并以更传统的方式使用过滤器,通过在web.xml
中声明它
<filter>
<filter-name>cors</filter-name>
<filter-class>your.package.CorsFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
相关文章:
- 从我的控制器返回一个不同于200的代码以触发ajax错误,这被认为是一种好的做法吗
- JSON分析错误:Java中AJAX、Javascript和Servlet的意外EOF
- 错误405:向Java控制器(Ajax)发送JSON时找不到POST方法
- AJAX简单错误.XMLHttpRequest无法加载http://localhost/mpl/getPage.php.
- VB NET JQUERY AJAX上出现错误500
- 一个ajax循环有两个输出错误innerHTML
- Ajax更新面板随机错误'PRM_MissingPanel'
- 错误:Ajax未定义
- 错误:$.ajax 不是一个函数
- 如何修复此未定义的索引错误?Ajax 到 PHP
- JSONP - 触发器完成、成功、错误 Ajax 调用
- 错误:ajax 方法中的循环
- Jasmine,一个测试,多个ajax请求(错误:ajax已经被监视)
- 被迫处理一个&在XML文件中,试图解决解析错误$.ajax({..})
- 0x800a138a-JavaScript运行时错误:AJAX调用中需要函数
- 使用量角器spyOn()为jQuery ajax()导致错误"ajax()方法不存在"
- Ajax返回错误调用错误Ajax错误调用
- JQuery错误ajax完成回调触发
- 从控制台进行Ajax调用,得到错误$.Ajax不是函数()
- 类型错误Ajax后Flask Python