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表

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章