后端springboot集成shiro之后,shiro框架会在浏览器端存一个 JSESSIONID ,
之前传统项目中页面每次请求都会带上JSESSIONID 到后台在进行权限验证操作等等,
可是现在是前后端分离,用户是访问前端项目,前端再访问服务端,那么这个JSESSIONID 就存不到用户浏览器中,
还会出现跨域问题,不知各位大佬都是如何解决的。

解决方案 »

  1.   

    main.js
    axios.defaults.withCredentials=true;
    拦截器
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
    response.setHeader("Access-Control-Allow-Headers", "Authorization, Accept, Origin, X-Requested-With, Content-Type, Last-Modified");
     response.setHeader("Access-Control-Allow-Credentials", "true"); 
      

  2.   

    思路挺多的, 简单说几个吧首先要说的是  JSESSIONID  是tomcat写到浏览器的, 跟shiro没什么关系, 有时候也叫SESSIONID, 这个具体跟你服务器有关, 也可以自定义名称, 在后端可以通过 request.getSession()拿到, 也可以通过 CookieUtils.getCookie("JESESSIONID")这种拿cookie的方式取到1. 前后端分离,但部署时仍使用同一域名, 这样就不会存在跨域问题, 无论是前端静态代码, 还是前端node服务, 同一用nginx进行处理, 同理, 如果是2级域名,虽然域名不同, 也能做到cookie共享, 这样也可以拿到sessionid
    2. 部署如果无法使用同一域名, 那么跨域问题就难免了, 需要跟前端共同研究下如何有效解决跨域问题, 后端其实加一些spring注解即可, 查下spring跨域即可
    3. 其实说到底, shiro只不过是要取当前登录信息, 你可以不用 SESSION 实现登录, 可以用token, 这样相当于账号系统独立出来了, 跟域就没什么关系了
      

  3.   

    跨域问题已经很轻易的 得到解决了 ,加了个spring注解即可,@CrossOrigin;
    sessionid问题,最终个人解决方案是,用户登陆成功后,接口就返回给他sessionid,然后前端进行保存,后面每次请求都要在请求头上加上该值, AUTHORIZATION:0c82beaf-d2fa-424c-b6bb-5d6eff21a236,后端需要修改一下shiro获取sessionid方式,具体如下:
    1.首先自定义sessionManager会话管理bean;
    2.修改获取sessionid方法;如有异议欢迎下面坐,谢谢各位见解!