springboot+Vue前后分离 后端获取sessionid不一致问题

问题描述:

记录一个很小但又搞得我蛋疼的问题:我在登陆之后将token和用户数据存到session当中,可当我在后面的接口取值时,为null

解决过程:

接下来在调试的时候发现每次请求sessionid不一致,期初我还是以为是跨域造成的,于是按照以往的方式配置拦截器设置了这样一段


        response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));//支持跨域请求
        response.setHeader("Access-Control-Allow-Headers", "Authorization, Origin, X-Requested-With, Content-Type, Accept,Access-Token");
        response.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS,PATCH");
        response.setHeader("Access-Control-Allow-Credentials","true");//是否支持cookie跨域

在前端配置了

axios.defaults.withCredentials = true;// 允许跨域携带cookie

重新启动项目刷新访问,发现依然不行,接下来我又把Origin写死成前端服务地址,可是还是不行......网上各种百度,答案跟我以上几乎一样,内心慌张,汗流一地...但还是得继续排查呀

继续一边百度一边打开了昨天研究的一个小demo,也用到了session中的数据,可那demo是能取到值的,我对比了连着之间的配置,Cors相关的配置都是差不多的呀,前端结构也一样的,这就奇怪了。

继续仔细对比,发现demo没有配置api项目名,也就是

server:
  servlet:
    #api前缀(项目名)
    context-path: /
  #服务端口
  port: 8080

而我这边是有配置项目名的,于是,我也把yaml和前端的项目名去掉了,结果还真就好了!!!

初步解决方案

可是配置在分模块开发nginx反向代理的场景下不配置项目名是不行的呀,可是又没有解决办法,情急之下想到了手动去修改Cookies的JSESSIONID的值,于是尝试在登陆之后将sessionid手动写入了Cookies的JSESSIONID,结果发现真的行得通!

可是仔细想想,这样做的话就把定sessionid的起始点写死了,如果要在登陆前请求其他需要用到session的接口,那不就GG了吗,如果有变动我们根本不确定要调的第一个接口是哪个,虽然我们开发时是知道的,但作为具有强迫症的开发者得我,是非常不容许“定死”“写死”这样的字眼出现在我的字典里的!!!

最终解决方案

知道是多了项目名的问题后,于是我又顺着“项目名导致session数据丢失”的思路去逛帖子,结果真发现了国外一老哥的一篇帖子!

模模糊糊看懂他表达的意思是将Vue代理中的的名字改为接口根路径(也就是后台配置的api项目名),抱着试一试的心态去改了

proxyTable: {
      '/Api': {
        target: 'http://192.168.1.133:8080/ttic/api/',
        changeOrigin: true,
        pathRewrite: {
          '^/Api': '/'
        }
      }
    },

改为以下
proxyTable: {
      '/ttic': {
        target: 'http://192.168.1.133:8080/ttic/api/',
        changeOrigin: true,
        pathRewrite: {
          '^/ttic': '/'
        }
      }
    },

重新编译后,重新进入看腻了的登录界面,啪!按下回车键,大功告成!!!进入首页了!!!至此终于解决了困扰了我一个多小时的问题!!!赶紧打开CSDN记录一下!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值