码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-05-22 11:39:57      阅读:584      评论:0      收藏:0      [点我收藏+]

标签:

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.

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

技术分享


问题点。

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




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

标签:

原文地址:http://blog.csdn.net/baicp3/article/details/45913387

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!