加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Ajax携带cookie解决方案

(2018-09-13 10:56:55)
标签:

ajax携带cookie

分类: java
场景:
后台需要前端的ajax请求携带上cookie值,因为cookie上面有用户的userId的加密信息。

解决步骤:
1、服务器方面,添加@CrossOrigin注解到controller层上。-----》解决服务端允许前端跨域问题。
2、前端方面:必须要注意的点是:浏览器的同源策略问题----》就是域名必须要一致,否则,ajax是不会携带非同源的cookie的。-----》怎样解决这个同源的问题呢?-----》如果前端同事懂的话,可以用node.js去配置代理---》如果是后台同事懂的话,可以用nginx去配置反向代理------》目的是:让域名保持一致!!!!!


下面是ngix的核心配置例子:
------------------------------------------------------------------------------------
 server {
        listen       80;
        server_name  at.ving.com;
        location /a/ {       
        proxy_pass    http://127.0.0.1:8020/;   ----》 at.ving.com/a 指向 http://127.0.0.1:8020/(前端)
            proxy_redirect default ;
            #root   html;
            #index  index.html index.htm;
        }
location /b/ {
        proxy_pass    http://127.0.0.1:10010/; ---》 at.ving.com/a 指向  http://127.0.0.1:10010/(接口)
            proxy_redirect default ;
            #root   html;
            #index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
------------------------------------------------------------------------------------
这样操作之后,域名就保持一致,cookie值就是同源,则发ajax的时候就是携带上cookie

下一问题就是:
浏览器上的cookie谁来写的问题:
方案一:前端代码来强制设置cookie值-------》踩过这个坑,如果前端同事不熟练的情况下,是比较难调通,因为要教会他。
方案二:让后台去写cookie到浏览器上。这个操作,在登录的时候,往往都会向浏览器上写上cookie。这样的操作,相对方案一的操作,比较灵活,可以切换不同的用户。建议使用此方式。

最后一步就是让ajax允许携带cookie
$.ajax({
        url: "http://10.100.99.165:10010/answerQuestion/getExtendKey", // 加随机数防止缓存
        type: "get",
        crossDomain: true,
        xhrFields: {
            withCredentials: true
        },
       
        success: function (data) {
            ;
        },
        error: function (r) {
            console.log(JSON.stringify(r));
        }
    });





0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有