Shiro权限-角色-用户关系分析及权限表达式动态加载到数据库(十二)

一、shiro权限-角色-用户关系分析

二、加载权限表达式 

步骤:

1)先自定义名称注解

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface PermissionName {
    String value();
}

2)在所有的controller中的需要进行权限控制方法里面贴上2给标签(这里只写employee:list方法,其他方法一样):如

@Controller
@RequestMapping("/employee")
public class EmployeeController {


    @RequestMapping("")
    @RequiresPermissions("employee:list")
    @PermissionName("员工列表")
    public String index() throws  Exception{
        System.out.println("执行了员工列表....");
        return "employee";
    }
}

3)PermissionController编辑reload方法, 加载权限

其中:IPermissionDAO添加一个获取所有权限表达是方法, 具体实现类

@Controller
public class PermissionController {

    //请求映射处理映射器
    //springmvc在启动时候将所有贴有请求映射标签:RequestMapper方法收集起来封装到该对象中
    @Autowired
    private RequestMappingHandlerMapping rmhm;

    @Autowired
    private IPermissionDAO permissionDAO;

    @RequestMapping("/reload")
    public String reload() throws  Exception{
        //将系统中所有权限表达式加载进入数据库
        //0:从数据库中查询出所有权限表达式,然后对比,如果已经存在了,跳过,不存在添加
        List<String> resourcesList = permissionDAO.getAllResources();
        //1:获取controller中所有带有@RequestMapper标签的方法
        Map<RequestMappingInfo, HandlerMethod> handlerMethods = rmhm.getHandlerMethods();
        Collection<HandlerMethod> methods = handlerMethods.values();
        for (HandlerMethod method : methods) {
            //2:遍历所有方法,判断当前方法是否贴有@RequiresPermissions权限控制标签
            RequiresPermissions anno = method.getMethodAnnotation(RequiresPermissions.class);
            if(anno != null){
                //3:如果有,解析得到权限表达式,封装成Permission对象保存到Permission表中
                //权限表达式
                String resource = anno.value()[0];

                //去除重复的
                if(resourcesList.contains(resource)){
                    continue;
                }
                Permission p = new Permission();
                p.setResource(resource);
                //设置权限名称
                p.setName(method.getMethodAnnotation(PermissionName.class).value());
                //保存
                permissionDAO.save(p);
            }
        }
        return "main";
    }

}

4)main主页中点击重新加载权限,进行权限加载

5)查看Permission表

猜你喜欢

转载自blog.csdn.net/qq_37431224/article/details/103967369