NutzCN Logo
问答 wk框架取得sys_role的方法,有时候为空
发布于 2867天前 作者 qq_d6d46f6d 2016 次浏览 复制 上一个帖子 下一个帖子
标签: nutzwk

wk中,使用如下代码取得当前用户权限列表

 Subject subject = SecurityUtils.getSubject();
        Sys_user curUser = (Sys_user) subject.getPrincipal();
        List<Sys_role> rolelist = curUser.getRoles();

在Sys_user中

 @ManyMany(from = "userId", relation = "sys_user_role", target = Sys_role.class, to = "roleId")
    protected List<Sys_role> roles;

取得roles为空
之前一直没有问题,今天换成生产库,出现了能取到跟没有取到这两种情况。

6 回复

我没看懂,能说的明白一些吗

subject.getPrincipal() 返回的对象,若对其进行修改,不会自动持久化回shiro内,使用session持久化时务必留心.

例如,返回的是user对象(假设没有roles),然后执行fetchLinks得到roles,那么,当前机器的user对象会有roles,另外一台机器不会有.

因为当前机器取的是修改过但未再次持久化的user,另外一个机器取的是之前持久化的未带roles的user.

把user对象保存到shiro内,并非一个好的实践,虽然方便,但容易误用

搜一下 doGetAuthenticationInfo(AuthenticationToken token),也就是把初始化放到do方法里,而不是控制器里,这样可以持久化到shiro里

最新版本应该没问题,你是使用哪个版本?参考提交,进行下修改即可。

我是用的是3.0,我去看看

添加回复
请先登陆
回到顶部