zoukankan      html  css  js  c++  java
  • spring mvc 跨域问题。。。解决

    官方推荐方式:
    
    http://spring.io/blog/2015/06/08/cors-support-in-spring-framework
    
    方式1:
    
        $.ajax({  //前台:常规写法。注意:如果用注解dataType别写成了JSONP 要写成JSON 两都有区别。一个是协议一个是数据格式(个人理解)
                        url:'http://localhost:8082/cors/corsTest.do',
                        data:{},
                        dataType:'json',
                        type:'post',
                        success:function(data){
                            alert(data.abc);
                        }
                    })
        // 后台代码 。。。 添加注解即可。CrossOrigin(这里可能配置多个地址。不配置默认全部 可以配置到controller上面。也可以配置方法上。都配置他会自动合并)
       @SuppressWarnings("unchecked")
        @RequestMapping(value="/corsTest",method = RequestMethod.POST)
        @ResponseBody
        @CrossOrigin
        public Object corsTest(){
            Map map = new HashMap();
            map.put("abc", 123);
            return map;
        }     
    
    方式2:
    
                      $.ajax({ //不采用注解方法,手动拼一个callback字符串。
                        url:'http://localhost:8082/cors/corsTest1.do',
                        data:{},
                        async:false,
                        dataType:'jsonp',
                        jsonpCallback:"callback",
                        type:'post',
                        success:function(data){
                            alert(data.abc);
                        }
                    })                
    
         
         后台代码:
      @RequestMapping(value="/corsTest1")
        @ResponseBody
        public Object corsTest1(){
            Map map = new HashMap();
            map.put("abc", 456);
            return "callback("+JSON.toJSONString(map)+")";
        }
    
    方式3:
    
    即不采用注解也不采用手动拼接字符串的方式 。就是用拦截器方式;
    
    public void doFilter(ServletRequest request, ServletResponse response,
                             FilterChain chain) throws IOException, ServletException {
            try {
                HttpServletRequest httpRequest = (HttpServletRequest) request;
                HttpServletResponse httpResponse = (HttpServletResponse) response;
    
                // 跨域
                String origin = httpRequest.getHeader("Origin");
                if (origin == null) {
                    httpResponse.addHeader("Access-Control-Allow-Origin", "*");
                } else {
                    httpResponse.addHeader("Access-Control-Allow-Origin", origin);
                }
                httpResponse.addHeader("Access-Control-Allow-Headers", "Origin, x-requested-with, Content-Type, Accept,X-Cookie");
                httpResponse.addHeader("Access-Control-Allow-Credentials", "true");
                httpResponse.addHeader("Access-Control-Allow-Methods", "GET,POST,PUT,OPTIONS,DELETE");
                if ( httpRequest.getMethod().equals("OPTIONS") ) {
                    httpResponse.setStatus(HttpServletResponse.SC_OK);
                    return;
                }
                chain.doFilter(request, response);
            } catch (Exception e) {
                logger.error("Exception in crossFilter", e);
                throw e;
            }
        }
    然后在web.xml配置一下就行了。
     <filter>
        <filter-name>crossDemoFilter</filter-name>
        <filter-class>com.shanreal.filter.crossFilter</filter-class>
      </filter>
      
      <filter-mapping>
        <filter-name>crossDemoFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    还有一种就是通过nginx配置。学习中
  • 相关阅读:
    oracle实验13:单行函数-数字函数
    oracle实验12:单行函数-字符函数
    oracle实验41:编写存储过程
    oracle实验40:编写函数
    oracle实验31:使用PL/SQL,书写一个最简单的块
    oracle实验9-11:使用where和order by子句
    oracle实验6-8:关于null值,列的别名,去掉重复行
    oracle实验5:查询当前用户的所有表和视图
    MD5
    时间戳 日期 转换
  • 原文地址:https://www.cnblogs.com/1-Admin/p/8664108.html
Copyright © 2011-2022 走看看