Jsonp 跨域方案

Jsonp post 跨域方案

本文给大家讲述的是个人在一个项目中遇到的关于jsonp的post跨域问题的解决过程,这里记录下来,分项给大家。最终问题得以解决,今天抽空与大家分享下。

处理的问题是国际化语言切换,SSO中选择语言需要带入各个应用中,在SSO中前台调用各个应用的后台方法,SESSIONID相同, 在当前浏览器中访问其它应用则语言带过去了.

原理: 同一个浏览器中调用A应用的SESSIONID只会生成一个,利用此原理,在SSO调用其它A应用,B应用语言ID就简单了.

前台的ajax调用方法:

$.ajax({
    url: 'http://'+data.APP_HOST+'/'+data.APP_PROJECT_NAME+'/login.spr?method=setResLocaleOutSys&language='+that.setLang,
    type:'POST',
    cache:false,
    data:{"openId":''},
    dataType: 'jsonp',
    jsonp:'jsoncallback',
    crossDomain: true,
    success:function(data) {
        console.log('设置成功!   '+this.url);
        console.log(data);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown){
           console.log(XMLHttpRequest.status);   // 200
           console.log(textStatus);   // parsererror
           console.log(errorThrown);  // SyntaxError: Unexpected end of input
           }
});

注:
type:’POST’, 请忽略,因为这个请求会以GIT的方式去调用,以下是抓包结果:
这里写图片描述

后台接口接收的方法:

@RequestMapping(params = "method=setResLocaleOutSys")
        @ResponseBody
        public void setResLocaleOutSys(HttpServletRequest request,HttpServletResponse response) {
            try {
                // 客户端请求参数
                String jsoncallback = request.getParameter("jsoncallback");
                HashMap<String, Object> map = new HashMap<String, Object>();
                String language = request.getParameter("language");
                //设置语言并放到session中
                request.getSession().setAttribute("language", language);
                resMessageSource.setResLocale(language);
                map.put("STATUS", "SUCCESS");
                map.put("SESSIONID", request.getSession().getId());
                response.getWriter().print(jsoncallback + "(" + JSONObject.fromObject(map) + ")");
            } catch (IOException e) {
                logger.info("异常:", e);
            }
        }

https://blog.youkuaiyun.com/zhoucheng05_13/article/details/78694766

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值