shiro----授权和自定义授权的三种方法

授权:给身份认证通过的任授予某些资源的访问权限 权限的粒度 粗粒度 细粒度

粗粒度
User 具有 CRUD 的操作 通常指的是表的操作

细粒度
只允许查询 id=1 的用户 使用业务代码实现

Shiro 的授权是粗粒度
角色:角色就是权限的集合

Shiro 中代码的实现
详细见代码

Shiro 中的授权检查的 3 种方式
A、 编程式
B、 注解式
c、标签式

自定义 Realm 实现授权

我们仅仅通过配置文件指定授权是非常的不灵活的,在实际的应用中我们是将用户的信息和合权限信息保存到数据库中,我们是从数据库中获得用户的信息 ,使用 JDBCRealm 进行授权 。使用 JDBCRealm 操作的时候也不是很灵活。所以我们一般使用自定义 Realm 实现授权

 //授权
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {

        String username = principalCollection.getPrimaryPrincipal().toString();

        //获得username  然后去数据库查询这个用户对应的角色,在根据角色查询出指定角色下对应的菜单,
        //返回给指定角色下的所有菜单--List集合
        System.out.println("username="+username);

        //模拟数据库查的菜单
        List<String>  list =new ArrayList<>();
        list.add("updateUser");
        list.add("addUser");
        list.add("deleteUser");

        SimpleAuthorizationInfo  simpleAuthorizationInfo=new SimpleAuthorizationInfo();

        for(String   l:list){
            simpleAuthorizationInfo.addStringPermission(l);
        }

        return simpleAuthorizationInfo;
    }

posted @ 2021-08-10 16:15  是但啦  阅读(224)  评论(0)    收藏  举报