Heeexy/SpringBoot-Shiro-Vue

用户信息可以成功保存到 session,但是后面从 session 中获取不到

guoguocai opened this issue · 9 comments

执行语句 SecurityUtils.getSubject().getSession().setAttribute(ShiroConstant.SESSION_USER_INFO, user); 后,用户信息是成功保存上了的,但是后面再通过 (User) session.getAttribute(ShiroConstant.SESSION_USER_INFO); 获取时,结果为null

看看sessionId是不是变了。 是不是跨域导致sessionid变了

怎么获取 sessionId?为了解决跨域,后端确实有个配置类

	SecurityUtils.getSubject().getSession().getId();

或者从浏览器看发出请求header中的jsessionid

sessionId 确实变了,上网搜了下解决方案,我加上了 withCredentials: true 参数,不管用;只能靠 token 或者 redis 了吗?我不太了解该用哪个方案

我也好几年不搞前端了,最近再搞一下发现貌似的确近期chrome更新了安全策略,你F12看看是不是response的header中有安全提醒。换火狐可以试试。
解决方案可以登陆后端返回一个token,前端在请求header中带上token。

其它更简单的解决跨域的方案可能要过阵子不忙了再去查下了

好的,感谢

不好意思,我又来请教了......

我现在的问题是:我通过 token 完成了用户认证,但是当请求添加了权限注解 @RequiresPermissions 的接口时,每次都直接返回:'code: "20011",msg: "登陆已过期,请重新登陆"',可是我明明已经用 token 认证过了,也完全没有进 AuthorizationAttributeSourceAdvisor 和授权方法 doGetAuthorizationInfo 里面去。

这是不是也是由于跨域引起的呢?然后让程序认为每个请求都是一个新的用户?

我也没有实践过,参考下 类似https://cloud.tencent.com/developer/article/1486323 这种shiro改造token的文章哈

好的,我研究下