天天看點

幾行代碼實作shiro超級管理者的功能

在項目開發中,需要實作shiro的超級管理者功能。

但網上查了一下相關實作,發現很多實作都是在使用者擷取權限資源時,如果是超級管理者,就将系統的全部權限,角色賦給使用者。

我個人覺得該方法比較複雜,取權限資源時,還要特别為超級管理者做特殊的處理。實際項目中,有沒有更簡單的方法呢?

答:有的,隻需要很簡單的實作.

實作方式如下:

在內建shiro時,我們都需要繼承AuthorizingRealm該類,實作隻需要重寫裡面的isPermitted及hasRole方法即可。

示例代碼如下:

public class MyShiroRealm extends AuthorizingRealm {
  @Override
   public  boolean isPermitted(PrincipalCollection principals, String permission){
        SecurityUser user = (SecurityUser)principals.getPrimaryPrincipal();
       return user.isAdmin()||super.isPermitted(principals,permission);
   }
    @Override
    public boolean hasRole(PrincipalCollection principals, String roleIdentifier) {
        SecurityUser user = (SecurityUser)principals.getPrimaryPrincipal();
       return user.isAdmin()||super.hasRole(principals,roleIdentifier);
    }
    。。。。
    }
           

該方法如此的簡單,比我們用什麼攔截器的都簡單友善.

注意,該方法隻适用于使用注解RequiresRoles,RequiresPermissions的權限攔截!

繼續閱讀