Shiro入门 - 通过自定义Realm连数数据库进行授权

shiro-realm.ini

[main]
#自定义Realm
myRealm=test.shiro.MyRealm

#将myRealm设置到securityManager,相当于Spring中的注入
securityManager.realms=$myRealm

MyRealm.java

/**
 * 授权
 * @param principals
 * @return
 */
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
    String account =  (String) principals.getPrimaryPrincipal();
    //所有权限实体
    List<Permission> permissions = iPermissionsService.selectPermission(account);
    //url集合
    List<String> permissionUrls = new ArrayList<>();
    for(Permission permission : permissions){
        permissionUrls.add(permission.getUrl);
    }
    SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
    info.addStringPermissions(permissionUrls);
    return info;
}

测试代码

/**
 * 通过自定义Realm查询数据库读取权限
 */
@Test
public void testMyRealm2(){
    Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro/shiro-realm.ini");
    SecurityManager securityManager = factory.getInstance();
    SecurityUtils.setSecurityManager(securityManager);
    Subject subject = SecurityUtils.getSubject();
    UsernamePasswordToken token = new UsernamePasswordToken("admin", "111111");
    subject.login(token);
    System.out.println("认证状态:"+subject.isAuthenticated());
    System.out.println(subject.isPermitted("user:create"));
    System.out.println(subject.isPermittedAll("user:create", "items:add"));
}

测试结果

认证状态:true
true
true

转载于:https://www.cnblogs.com/bobi1234/p/7280174.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值