java吧 关注:1,270,649贴子:12,777,226
  • 7回复贴,共1

shiro怎么把用户名、密码、角色存入到PrincipalCollection

只看楼主收藏回复

一个用户有多个角色,登陆的时候选择一个角色,这个时候用户名、密码、角色三个参数就传到了controller里面了,这个时候怎么把这三个信息全都传到doGetAuthorizationInfo的PrincipalCollection中,login(token)里面的token只包含用户名和密码,没有角色信息,shiro有没有自带的传角色参数的方法?我能想到的只有把角色存入到session,然后用到的时候取出来。


IP属地:浙江1楼2017-12-13 17:47回复


    IP属地:浙江来自Android客户端3楼2017-12-14 23:32
    回复
      2025-07-23 10:22:48
      广告
      不感兴趣
      开通SVIP免广告
      自己写个过滤器,继承原有的登录过滤器,重写里面的登录方法,xml配置url过滤链的时候把自己的过滤器别名替换掉原来的login。


      IP属地:浙江来自iPhone客户端4楼2017-12-15 01:41
      回复
        简单的方法:通过用户名获取用户信息,顺便还能验证


        IP属地:湖北6楼2017-12-15 10:45
        回复
          User user = (User)principals.getPrimaryPrincipal()。实在可以用这个方法


          IP属地:湖北7楼2017-12-15 10:46
          收起回复
            楼主应该早就解决了,不过为了后来人,我回答下,
            在自定义realm里的认证方法要返回的信息AuthenticationInfo,简单的说就是principalCollection里的内容,所以只需要在doGetAuthenticationInfo(AuthenticationToken token)方法里,
            SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(
            userInfo, //用户信息类
            userInfo.getPassword(), //密码
            ByteSource.Util.bytes(userInfo.getCredentialsSalt()),//salt=username+salt
            getName() //realm name
            );
            return authenticationInfo;
            userInfo是怎么来的就不用说了吧


            IP属地:上海8楼2018-06-21 21:38
            回复
              我来说一下吧, 8楼木有仔细看题目。
              首先楼主说的 是角色如何传递存储: roles
              是在授权方法:
              doGetAuthorizationInfo (PrincipalCollection principals){
              // 新建一个简单授权对象
              SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
              info.setStringPermissions( setC ); // 设置字符串权限标识
              info.setRoles( setR ); // 设置角色
              return info;
              }
              而 UserInfo 是认证时存入 Session 并 存入 SimpleAuthorizationInfo 对象的 .
              实际执行授权时,获取的是 SimpleAuthorizationInfo 对象内的 principals 属性值.


              IP属地:江苏9楼2018-10-26 17:04
              回复