Shior 框架进阶(六)----------自定义Realm授权

Shior 框架进阶(六)

----------自定义Realm授权

之前的文章当中我们有说明自定义的Realm认证,但是继承的类当中只有认证的方法没有授权的方法,但是在实际的运用过程当中认证和授权往往是在一起使用的,当你认证成功过之后,所返回的信息会被授权的方法收到,他会根据你认证完成之后返回的信息来进行授权,当然由解决的方式那就是扩展类AuthorizingRealm它里面由两个方法,一个是授权一个是认证,下文将实现的就是这种方法;

那么接下来我们就来说明自定义的Realm授权,这李我们的权限信息任然是写在ini文件当中,在项目整合的时候这些信息由两种写法,一种实在shiro的配置文件当中,另一种就是实现配置文件当中的ShiroFilterFactoryBean

采用map的方式来添加,这个会在最后的整合当中来说明:

接下来就来看这种自定义的Realm授权:

1、ini中配置realm shiro­realm­authorization.ini 

[main]

#自定义 realm

customRealm=com.qfedu.shirodemo.realm.CustomRealm2

#将realm设置到securityManager,相当 于spring中注入

securityManager.realms=$customRealm

2、自定义realm

从认证的realm拷贝,

改变继承的抽象父类,添加新的方法 为了测试方便,可以定和上一节的例子中的ini文件一致的权限和角色信息

public class CustomRealm2 extends AuthorizingRealm {

/**   

 * 用于认证   

 * @param authenticationToken     

* @return     

* @throws AuthenticationException     

*/    @Override  

 protected AuthenticationInfo

doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws

AuthenticationException {

       

//将之前的认证代码复制过来即可

}

 

/**    

* 用于授权    

* @param principals    

* @return     

*/    @Override   

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {      

 //从 principals获取主身份信息      

 //将getPrimaryPrincipal方法返回值转为真实身份类型       

// (在上边的doGetAuthenticationInfo认证通过并填充到SimpleAuthenticationInfo中的身份类型),

 

String userCode = (String) principals.getPrimaryPrincipal();       

System.out.println("用户信息:" + userCode);

 

//模拟从数据库获取到权限数据      

 List<String> permissions = new ArrayList<String>();        

permissions.add("system:user:*");

     

permissions.add("system:menu:*");

       

permissions.add("system:config:*");

 

//模拟从数据库获取到角色数据      

 List<String> roles = new ArrayList<String>();        

roles.add("role1");        

roles.add("role3");

 

  //初始化授权对象       

SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();         

//授权权限      

 simpleAuthorizationInfo.addStringPermissions(permissions);       

//授权角色       

simpleAuthorizationInfo.addRoles(roles);     

return simpleAuthorizationInfo;    

}

}

 

3、测试 直接

只需要修改加载配置文件的文件名即可,可在本系列的第一篇上面找到测试的代码;

注意:测试时会发现,每次进行权限和角色的比对时都会执行授权的代码,效率低。后面会讲到缓存的问题

       

String userCode = (String) principals.getPrimaryPrincipal();       

System.out.println("用户信息:" + userCode);

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_42112846;

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值