shiro教程之编程式授权

一、权限认证的核心要素
权限认证即访问控制:在应用中控制谁能访问哪些资源。在权限认证中,最核心的三要素是:权限、角色和用户;
权限,即操作资源的权利,比如访问某个页面,以及对某个模块的数据的加载、修改、删除、查看的权利;
角色,是权限的集合,一种角色可以包含多种权限;
用户,是Shiro中,代表访问系统的用户,即Subject。

二、基于角色的访问控制
shiro_role.ini

[users]
root=123456,role1,role2
gates=123456,role1
package com.shiro;

import java.util.Arrays;

import org.apache.shiro.subject.Subject;
import org.junit.Test;

import com.shiro.common.ShiroUtils;

public class RoleTest {

    @Test
    public void testHasRole() {
        Subject currentUser=ShiroUtils.login("classpath:shiro_role.ini", "gates", "123456");
        System.out.println(currentUser.hasRole("role2")?"hasRole2":"notHasRole2");
        currentUser.logout();
    }

    @Test
    public void testHasRoles() {
        Subject currentUser=ShiroUtils.login("classpath:shiro_role.ini", "root", "123456");
        boolean[] result=currentUser.hasRoles(Arrays.asList("role1","role2","role3"));
        for (boolean b : result) {
            System.out.println(b);
        }
        currentUser.logout();
    }

    @Test
    public void testHasAllRoles() {
        Subject currentUser=ShiroUtils.login("classpath:shiro_role.ini", "root", "123456");
        System.out.println(currentUser.hasAllRoles(Arrays.asList("role1","role2"))?"yes":"no");
        currentUser.logout();
    }

    @Test
    public void testCheckRole() {
        //checkRole没有返回值,若没有role则抛出异常
        Subject currentUser=ShiroUtils.login("classpath:shiro_role.ini", "gates", "123456");
        currentUser.checkRole("role1");
        currentUser.logout();
    }

    @Test
    public void testCheckRoles() {
        Subject currentUser=ShiroUtils.login("classpath:shiro_role.ini", "root", "123456");
        currentUser.checkRoles("role1","role2");
        currentUser.logout();
    }
}

shiro_permission.ini

[users]
gates=123456,role1
root=123456,role1,role2
[roles]
role1=user:select
role2=user:select,user:add,user:update,user:delete
package com.shiro;

import org.apache.shiro.subject.Subject;
import org.junit.Test;

import com.shiro.common.ShiroUtils;

public class PermissionTest {

    @Test
    public void testIsPermitted() {
        Subject currentUser=ShiroUtils.login("classpath:shiro_permission.ini", "gates", "123456");
        //System.out.println(currentUser.isPermitted("user:select"));
        boolean[] result=currentUser.isPermitted("user:select","user:update");
        for (boolean b : result) {
            System.out.println(b);
        }
        currentUser.logout();
    }

    @Test
    public void testIsPermittedAll() {
        //必须全都有才返回true
        Subject currentUser=ShiroUtils.login("classpath:shiro_permission.ini", "gates", "123456");
        System.out.println(currentUser.isPermittedAll("user:select","user:update"));
        currentUser.logout();
    }

    @Test
    public void testCheckPermission() {
        //没有返回值,错误抛出异常
        Subject currentUser=ShiroUtils.login("classpath:shiro_permission.ini", "gates", "123456");
        currentUser.checkPermission("user:select");
        currentUser.logout();
    }

    @Test
    public void testCheckPermissions() {
        //没有返回值,错误抛出异常
        Subject currentUser=ShiroUtils.login("classpath:shiro_permission.ini", "root", "123456");
        currentUser.checkPermissions("user:select","user:add","user:update","user:delete");
        currentUser.logout();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值