美文网首页
Shiro基于Realm授权的配置流程

Shiro基于Realm授权的配置流程

作者: 我叫罗大大 | 来源:发表于2019-07-14 22:28 被阅读0次
具体配置

①给需要权限的处理方法加上权限表达式注解@RequiresPermissions

//第一个参数代表中文权限表达式,第二个参数代表权限表达式
@RequiresPermissions(value = {"员工编辑", "employee:input"}, logical = Logical.OR)

Logical.OR:当多个权限表达式存在时,校验只要有一个即可以

Logical.AND:当多个权限表达式存在时,必须都存在才可以校验

②配置注解扫描器AuthorizationAttributeSourceAdvisor,并添加到安全管理器管理

<!--权限注解扫描器-->
<bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> 
    <!--添加安全管理器-->
    <property name="securityManager" ref="securityManager"/>
</bean>

③服务器代码实现注解的加载

//再次加载时不应该出现重复的参数
//先查询出数据库保存的数据,和得到的注解的方法作对比,如果存在则不往数据库添加权限表达式
public void reload() { 
    //获取到所有控制器的对象
    Map<String, Object> beans = application.getBeansWithAnnotation(Controller.class);
    System.out.println("application"+beans.entrySet());
    //得到控制器对象
    Collection<Object> values = beans.values();
    //遍历controller对象里的方法
    for (Object controller : values) {
        //得到控制器里的所有的方法
        //获取父类里的方法
        Method[] methods = controller.getClass().getSuperclass().getDeclaredMethods();
        //遍历控制器里的方法,判断是否有requestPermission注解
        for (Method method : methods) {
            boolean annotationPresent =
                method.isAnnotationPresent(RequiresPermissions.class);
            if (annotationPresent) {
                //得到当前方法的简单名字
                //String methodName = method.getName();
                String expression = StringUtils.getExpression(method);
                //判断当前表达式的名字是否存在,存在则不保存
                List<Permission> permissions = permissionMapper.queryForList(new                         PermissionQuery());
                HashSet<String> set = new HashSet<>();
                for (Permission permission : permissions) {
                    set.add(permission.getExpression());
                }
                if (!set.contains(expression)) {
                    Permission permission = new Permission();
                    permission.setName(method.
                     getAnnotation(RequiresPermissions.class).value()[0]);
                    permission.setExpression(method.
                    getAnnotation(RequiresPermissions.class).value()[1]);
                    permissionMapper.insert(permission);
                }
            }
        }
    }
}

④在自建Realm中实现授权

//获取授权信息
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
    //查出所有权限信息
    List<Permission> permissions = permissionService.selectAll();
    //得到用户,判断是否是超级管理员
    Employee employee =(Employee)principalCollection.getPrimaryPrincipal();
    if (employee.isAdmin()) {
        info.addRole("admin");
        //如果是admin,则给予所有的权限
        info.addStringPermission("*:*");
    }else {
        //查询到该用户的角色的编码
        List<String> roleList = roleMapper.getRoleIdByEmployeeId(employee.getId());
        //查询到该用户的权限信息
        List<String> permissionList = 
        permissionService.getPerssionsByEmployeeId(employee.getId());
        //添加该用户的角色信息
        info.addRoles(roleList);
        //添加该用户的权限信息
        info.addStringPermissions(permissionList);
    }
    //返回授权认证的信息
    return info;
}

相关文章

  • Shiro基于Realm授权的配置流程

    具体配置 ①给需要权限的处理方法加上权限表达式注解@RequiresPermissions Logical.OR:...

  • 5.Shrio加密

    Shiro授权流程图 image.png pom文件参见JdbcRealm java代码 1.自定义Realm 2...

  • Shiro授权过程

    Shiro授权流程图 Shiro授权流程 创建SecurityManager; 主体授权; SecurityMan...

  • springboot + shiro +cas 集成

    shiro 认证流程图: shiro 授权流程图: shiro 认证时序图: shiro + cas 认证时序图:...

  • springboot整合shiro

    1. pom.xml文件引入依赖 2. 创建shiro配置类 2.1 创建自定义Realm类 实现认证和授权 3....

  • Shiro的用法以及配置

    shiro认证的流程(非常重要) 为什么要重写realm?如何重写realm? 在执行调用subject.logi...

  • 自定义Realm

    项目结构 pom.xml 自定义的Realm 配置文件 shiro-realm.ini 配置文件格式不能是txt应...

  • Shiro5-使用 Shiro 进行认证

    shiro 认证流程 从上面流程可以看出最重要的就是 Authenticator 和 Realm. 入门程序 使用...

  • Shiro 的 Realm

    在认证、授权内部实现机制中都有提到,最终处理都将交给Realm进行处理。因为在Shiro中,最终是通过Realm来...

  • shiro小记

    shiro介绍 Shiro是一个Java平台的开源权限框架,用于认证和访问授权 shiro用户验证流程 流程1:主...

网友评论

      本文标题:Shiro基于Realm授权的配置流程

      本文链接:https://www.haomeiwen.com/subject/dpcwkctx.html