shiro 权限认证的原理,个人的理解

1.对有没有访问权限的理解。  我们这里要对系统中的 角色组、角色、用户、功能 之间的关系要理清楚,http://blog.csdn.net/baicp3/article/details/45028013方便下面用户是否具有某一url的访问。

我们看shiro的配置文件,所以的请求都是需要用户登录的


因而用户 在登录成功时候,shiro已经把该用户是否有访问某一url的权限已经判断好了。

看下面简单的代码

   @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        //获取当前登陆的用户名
        String loginName = 
              (String) principalCollection.fromRealm(getName()).iterator().next();
        //根据用户名查找对象
        User user = userService.findByLoginName(loginName);
        if(user != null) {
            SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
            //添加角色(Set集合<字符串>)
            info.setRoles(user.getGroupNameSet());
            //迭代用户对应的角色集合,为了获取角色对应的权限
            for(UserGroup g : user.getUserGroupList()) {
                //添加permission
                info.addStringPermissions(g.getPermissionStringList());
            }
            return info;
        }
        return null;
    }

   
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(
            AuthenticationToken authenticationToken) throws AuthenticationException {
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        //根据用户名去查找对象
        User user = userService.findByLoginName(token.getUsername());
       
        if(user != null) {
          return new SimpleAuthenticationInfo(user.getName(),
              user.getPassword(),getName());
        }
        return null;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }

}

shiro其实已经帮我们写好了方法,我们只要去重写 首先看源码

本人系统这个类RapShiroRealm 去实现(抽象类AuthorizingRealm 重写doGetAuthorizationInfo方法 权限认证

AuthorizingRealm类又继承AuthenticatingRealm抽象类  shiro开发者帮我们写好了。重写doGetAuthenticationInfo方法 认证回调函数 登录时调用)看上面的两个方法帮助我们更好的去理解。

详细一点的步骤:

 首先在访问我们controller的方法上定义好


访问该controller 需要用户携带 demo:simple. 通过重写类AuthorizingRealm的方法doGetAuthorizationInfo 在该方法中,用户在登录的时候执行,  SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
            //添加角色(Set集合<字符串>)
            info.setRoles(user.getGroupNameSet());
            //迭代用户对应的角色集合,为了获取角色对应的权限
            for(UserGroup g : user.getUserGroupList()) {
                //添加permission
                info.addStringPermissions(g.getPermissionStringList());
            }  这段代码 可以把该用户到底拥有哪些permission都存储起来了。


2.由于我们重写了shiro的抽象类AuthorizingRealm 的方法doGetAuthorizationInfo  他在登录的时候就会将登录成功之后改用户是否有哪些地方的url访问权限都存放起来了。要用的时候直接如下图判断:



问题点。

我们写的类RapShiroRealm 加载时机,或者说它是怎么触发的??




  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值