Spring Boot整合Shiro進行權限授權管理

Spring Boot整合Shiro進行權限授權管理

上次咱們說到了在Spring Boot中整合Shiro進行身份驗證,在其基礎上咱們今天繼續來說說Shiro另一個很重要的功能權限管理。

一.自己定義的域重寫doGetAuthorizationInfo方法

上一章中咱們的域MyShiroRealm中doGetAuthorizationInfo方法直接返回null,不做權限的處理。現在我們需要重寫這個方法進行用戶權限的分配。


@Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        System.out.println("權限配置-->MyShiroRealm.doGetAuthorizationInfo()");
        SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();

        // 驗證後通過的用戶信息
        UserInfo userInfo = (UserInfo) principals.getPrimaryPrincipal();
        for (Role role : userInfo.getRoleList()) {
            // 分配角色
            authorizationInfo.addRole(role.getRole());
            for (Permission p : role.getPermissions()) {
                // 分配權限
                authorizationInfo.addStringPermission(p.getPermission());
            }
        }
        return authorizationInfo;
    }

二.訪問需要權限的鏈接

在UserController控制器中我們新增一個方法進行測試

        @RequestMapping("/userAdd")  
        @RequiresPermissions("userInfo:add")//需要權限;  
        @RequiresRoles("admin")
        public String userInfoAdd(){  
           return "userInfoAdd";  
        }

從註解上大概也能猜出來,訪問/userAdd需要userInfo:add權限和admin的用戶。現在啓動項目的話會發現這兩個註解並沒有生效,我們需要配置兩個代理。在ShiroConfig類中加上:


   /**
     * 開啓shiro aop註解支持. 使用代理方式;所以需要開啓代碼支持;
     * 
     * @param securityManager
     * @return
     */
    @Bean
    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
        AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
        authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
        return authorizationAttributeSourceAdvisor;
    }

    @Bean
    public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator() {
        DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
        advisorAutoProxyCreator.setProxyTargetClass(true);
        return advisorAutoProxyCreator;
    }

三.啓動項目進行測試

啓動項目我們在下面代碼處打個斷點看下訪問的用戶信息裏有什麼
這裏寫圖片描述

UserInfo [uid=1, name=ADMIN, password=5b48c185e886ff93be5244f979b2864b, salt=asdfghjkl, roleList=[Role [id=1, role=admin, permissions=[SysPermission [id=1, name=UserManger, url=userInfo/userList, permission=userInfo:view, roles=null], SysPermission [id=2, name=UserAdd, url=userInfo/userAdd, permission=userInfo:add, roles=null], SysPermission [id=3, name=UserDelete, url=userInfo/userDel, permission=userInfo:del, roles=null]], userInfos=null]]]

發現請求訪問的用戶具有role的角色和userInfo:add的權限,所以可以訪問。
可以把需要的權限和角色進行修改後再發送訪問請求,會發生什麼大家可以自行測試。

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