跨域问题

跨域:ip|域名|端口号-不同称为跨域
js在项目中不能使用ajax直接调用外部的服务的
跨域加载可以,跨域请求数据不行

前端跨域
    方式一
        1.abc(某){某在方法里相当于json,即跨域请求的json};
        2.$.getJSONP(url);//url地址=www.xxx.cn?xx=abc

        3.Controller里
        第一种--返回的
            @RequestMapping(value="/test",produces=MediaType.APPLICATION_JSON_VALUE+";charset=utf-8")
            //解决json乱码问题
            @ResponseBody
            private String getList(String xx){
                if(StringUtils.isBlank(xx)){//lang3
                //xx为空直接返回json(String)        
                }
                return xx+"("+json(要为String)+")";
            }
            请求接口后接收abc(json数据),会执行,abc函数,参为接收的json
            
        第二种--即jsonp返回[abc(json数据即fff)]
            springmvc要为4.1版本以上
            url地址=www.xxx.cn/check/par/typ?xx=abc
            @RequestMapping("/check/{param}/{type}")
            @ResponseBody
            public Object checkData(@PathVariable String param, @PathVariable Integer type, String xx) {
                try {
                    //此处获取数据库数据赋给fff
                    //当用户传递参aaa不为空,表请求的数据为jsonp数据--跨域用的,为空表是自己调用直接返回json
                    if (StringUtils.isNotBlank(xx)) {
                        //请求为jsonp调用,需要支持
                        MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(fff(可任意类型如类Map等));
                        mappingJacksonValue.setJsonpFunction(xx);
                        return mappingJacksonValue;//返回jsonp
                    }
                    return fff;//返回json
                } catch (Exception e) {
                    e.printStackTrace();
                    return Helper.exceptionToString(e);
                }
            }
            第一种与第二种一个意思
        猜当2执行,再3返回数据,此时1的方法运行

    方式2 jsonp
         示例书<<从零开始写Java Web框架>>前端跨域P305

后端跨域    
    httpClient是用在java里server层
    示例
        PayCost cost=new PayCost();        
        cost.setPhoneNo(phoneNo);
        cost.setPkgNo(pkgNo);
        cost.setTimeStamp(Helper.dateToString(new Date(), "yyyyMMddHHmmss"));
        String appSecret=cost.getAppSecret();
        String action=cost.getAction();
        //System.out.println("?"+action);
        String appKey=cost.getAppKey();
        String phoneNoo=cost.getPhoneNo();
        String pkgNoo=cost.getPkgNo();
        String backUrl=Helper.getBASE64("http://www.perai.cn:8181/tra_top_up/returnCallTraffic");
        String transNo=Helper.dingdanId();
        String timeStamp=cost.getTimeStamp();
        String sign=appSecret+"action"+action+"appKey"+appKey+"backUrl"+backUrl+"phoneNo"+phoneNoo+
                "pkgNo"+pkgNoo+"timeStamp"+timeStamp+"transNo"+transNo+appSecret;    
        //System.out.println("sign---"+sign);
        sign=(Helper.nvlString(Helper.SHA1(sign))).toUpperCase();        
        cost.setSign(sign);
        //System.out.println("sign---"+sign);
        Map<String, String> param=new HashMap<String, String>();
        param.put("action",action);
        param.put("appKey",appKey);
        param.put("backUrl",backUrl);
        param.put("phoneNo",phoneNoo);//手机号
        param.put("pkgNo",pkgNoo);    //流量包类型    
        param.put("timeStamp",timeStamp);
        param.put("transNo",transNo);//客户端交易号
        param.put("sign",sign);    
        //System.out.println(param);
        String doPost = Helper.doPost("http://61.50.245.230:81/flowAgent", param);    //参1是地址,参2是请求参数的Map集
        Map stringJSONToMap = Helper.StringJSONToMap(doPost);
        String orderId=(String) stringJSONToMap.get("orderId");//对方唯一码
        String respCode=(String) stringJSONToMap.get("respCode");//响应码描述
        Trafficrecordyh trafficrecordyh=new Trafficrecordyh();
        trafficrecordyh.setDatetime(new Date());
        trafficrecordyh.setOrderid(orderId);
        trafficrecordyh.setRespcode(respCode);
        trafficrecordyh.setPhoneno(phoneNoo);
        trafficrecordyh.setTransno(transNo);
        trafficrecordyh.setPkgno(pkgNoo+"信息");
        trafficrecordyhMapper.insertSelective(trafficrecordyh);
        return doPost;

        
        doPostYKY 方法是不需要引什么jar包的
        doPost 与 doPostJSON 的区别:参不一样
        这三种方式都行
使不会产生跨域    
    方式1:用CORS
        spring配置,如下地址不会导致跨域
        <mvc:cors>    
            <mvc:mapping path="/da_rev/**"
                allowed-origins="http://192.168.0.194:8181"
                allowed-methods="GET, POST"
                allowed-headers="*"
                exposed-headers="" 
                allow-credentials="false"
                max-age="3600" />        
            <mvc:mapping path="/jiekou"
                allowed-origins="http://192.168.0.194:8181" />    
        </mvc:cors>
        <mvc:cors报找不着,解决:最上面那块改为 http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
    方式2:用nginx //基本使用可见
        listen       80;
        server_name   www.nzxxx.cn;

        location / {
            root   /Users/xxx/ideaProjects/webtest/dist;        //静态地址指向 http://www.nzxxx.cn:80/aa.html 会访问 /Users/xxx/ideaProjects/webtest/dist/aa.html
            index  index.html;
            
            # 此处用于处理 Vue、Angular、React 使用H5 的 History时 重写的问题
            if (!-e $request_filename) {
                rewrite ^(.*) /index.html last;
                break;
            }
        }
        # 代理服务端接口
        location /api/ {        //猜可此行不一样,如下地址也不一样,实现多个后台的代理
            proxy_pass http://www.nzxxx.cn:8080/;
        }
        //后台项目用8080启动,前台的 http://www.nzxxx.cn:80/api/aa 实则访问 http://www.nzxxx.cn:8080/aa 这样前端项目(80)就不会因为端口(后台8080)导致跨域
    
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值