当前位置: 首页 > 面试题库 >

Spring RestController的跨域ajax请求问题

金何平
2023-03-14
问题内容

我遇到了Ajax跨域请求的问题。

以下是我的弹簧控制器的代码:

@RestController
@RequestMapping(value = "/help")
public class MYController {

        @Autowired
        private MyService myService;

        private static final int SUCCESS = 1;
        private static final int FAIL    = 0;

        @RequestMapping(value = "save", method = RequestMethod.POST,produces={"application/json"})
        public int save(@RequestBody Item item,HttpServletRequest request,HttpServletResponse response) {

                response.addHeader("Access-Control-Allow-Origin","*");  
                response.addHeader("Access-Control-Allow-Methods","GET, PUT, POST, DELETE, OPTIONS");  
                response.addHeader("Access-Control-Allow-Headers","Content-Type, Content-Range, Content-Disposition, Content-Description");

                try {
                        myService.save(item);
                        return SUCCESS;
                } catch (Exception ex) {
                        ex.printStackTrace();
                        return FAIL; 
                }
        }  
}

上面的代码是我的REST服务的一部分,它在其他tomcat上运行。

以下是我的脚本代码,这是我的客户代码。

$.ajax({
               type: "POST",
               url:"http://10.10.13.215:9092/helpProject/help/save",
               crossDomain: true,
               dataType: "JSON",
               data:JSON.stringify(item), //item is my pojo here
               headers : {Accept : "applicationjson","Access-Control-Allow-Origin" : "*"},
                   success: function(msg) {
                         alert(msg);
            },
             error: function (e) { 
                   alert("errorrrrrr");
             }
            });

我在浏览器的控制台中遇到以下错误:

XMLHttpRequest cannot load http://10.10.13.215:9092/helpProject/help/save",
     No 'Access-Control-Allow-Origin' header is present on the requested resource. 
     Origin 'http://localhost:8082' is therefore not allowed access.

请帮助解决..谢谢


问题答案:

尝试添加此过滤器。

@Component
public class CorsFilter implements Filter {


@Override
public void init(FilterConfig filterConfig) throws ServletException {
    // TODO Auto-generated method stub

}


@Override
public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    HttpServletResponse res = (HttpServletResponse) response;
    res.setHeader("Access-Control-Allow-Origin", "*");
    res.setHeader("Access-Control-Allow-Methods",
            "POST, GET, OPTIONS, DELETE");
    res.setHeader("Access-Control-Max-Age", "3600");
    res.setHeader("Access-Control-Allow-Headers", "x-requested-with");
    chain.doFilter(request, res);
}


@Override
public void destroy() {
    // TODO Auto-generated method stub

}

}


 类似资料:
  • 问题内容: 在我的项目中,我需要允许其他人向我的脚本发送ajax请求。因此,外部请求可能来自其他网站和域,也可能来自浏览器扩展。 我在脚本顶部仅添加了以下两行,以使它们能够做到: 现在我的问题是:这里是否遗漏了任何安全方面的考虑?这个简单的解决方案会带来严重的问题吗? 如果是这样,什么是更好的解决方案? 感谢您的回复。 问题答案: 如上所述,任何人都可以随时向您的页面发送请求:因此,您需要考虑的主

  • 问题内容: 如何使用XDomainRequest正确重写Ajax请求以使其在IE 8 +中工作? 问题答案: 将此插件用于IE8-9 Xdomain支持。 https://github.com/MoonScript/jQuery-ajaxTransport- XDomainRequest

  • 问题内容: curl -v -X POST -H “Authorization: Basic ” -k -d “grant_type=password&username= &password= ” -H “Content-Type:application/x-www-form-urlencoded” https://localhost:9443/oauth2/token (来自 https://d

  • 在我的项目中,我需要允许其他人向我的脚本发送ajax请求。因此,外部请求可能来自其他网站和域,也可能来自浏览器扩展<我只是在我的脚本顶部添加了这两行,让他们完成这项任务: 现在我的问题是:这里有我错过的任何安全考虑吗?这个简单的解决方案会产生严重的问题吗? 如果是,更好的解决方案是什么? 感谢您的回复。

  • 本文向大家介绍Ajax请求WebService跨域问题的解决方案,包括了Ajax请求WebService跨域问题的解决方案的使用技巧和注意事项,需要的朋友参考一下 1、背景   用Jquery中Ajax方式在asp.net开发环境中WebService接口的调用 2、出现的问题 原因分析:浏览器同源策略的影响(即JavaScript或Cookie只能访问同域下的内容); 3、解决方案: (1) J

  • 本文向大家介绍jQuery Ajax实现跨域请求,包括了jQuery Ajax实现跨域请求的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了jQuery Ajax跨域请求的具体代码,供大家参考,具体内容如下 html 代码清单: 服务端 validate.php 代码清单: 效果图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我试图从我的新Angular应用程序中调用REST web服务。当发出请求时,我会得到以下错误: XMLHttpRequest无法加载http://localhost:8080/WebService。请求的资源上没有“访问-控制-允许-来源”标头。因此,不允许访问源“http://localhost”。 我发现这是因为浏览器不允许这样的操作。 编辑我也试着把它添加到我的angular应用程序中:

  • 问题内容: 这是问题所在: 1.)我们在这里有页面… www.blah.com/mypage.html 2.)该页面要求这样的js文件www.foo.com … 3.)“ jsfile.js”使用Prototype向Ajax请求发回www.foo.com。 4.)ajax请求调用www.foo.com/blah.html。回调函数获取html响应并将其放入div中。 虽然这似乎不起作用,但我想它是