《一头扎进 shiro 视频学习笔记》(2)-身份认证

首先先写一个工具类:

/** * Created by Liwei on 2016/2/9. */
public class ShiroUtil {


    public static Subject login(String configFile,String userName,String passwoord){
        // 注意:这里 SecurityManager 所在的包名
        // 读取配置文件,初始化SecurityManager工厂
        Factory<SecurityManager> factory = new IniSecurityManagerFactory(configFile);
        SecurityManager securityManager = factory.getInstance();
        // 把 securityManager 的实例绑定到 SecurityUtils 上
        SecurityUtils.setSecurityManager(securityManager);
        // 得到当前执行的用户
        Subject currentUser = SecurityUtils.getSubject();
        // 自己创建一个令牌
        UsernamePasswordToken token = new UsernamePasswordToken(userName,passwoord);
        try {
            // 身份认证
            currentUser.login(token);
            System.out.println("身份认证成功");
        } catch (AuthenticationException e) {
            e.printStackTrace();
        }
        return currentUser;
    }
}

认证分角色认证和权限认证。

角色认证配置文件:

[users]
liwei=123456,role1,role2
zhouguang=123456,role1

测试代码:

public class RoleTest {


    /** * 测试是否有角色,测试方法 hasRole */
    @Test
    public void testHasRole(){
        Subject currentUser = ShiroUtil.login("classpath:shiro_role.ini","liwei","123456");
        System.out.println(currentUser.hasRole("role1"));
        System.out.println(currentUser.hasRole("role2"));
        // 测试是否分别有三个角色
        boolean[] results = currentUser.hasRoles(Arrays.asList("role1","role2","role3"));
        for(boolean result:results){
            System.out.println(result);
        }
        // 区别上面的方法,下面的方法测试的是,一个角色是否同时拥有指定的几个角色
        System.out.println(currentUser.hasAllRoles(Arrays.asList("role1","role2")));
        System.out.println(currentUser.hasAllRoles(Arrays.asList("role1","role2","role3")));
        currentUser.logout();
    }


    /** * 与上面的方法的不同之处在于,角色验证没有通过,抛出运行时异常 */
    @Test
    public void testCheckRole(){
        Subject currentUser = ShiroUtil.login("classpath:shiro_role.ini","liwei","123456");
        currentUser.checkRole("role1");
        currentUser.checkRole("role2");
        currentUser.checkRoles(Arrays.asList("role1","role2"));
        // 下面的代码抛出 org.apache.shiro.authz.UnauthorizedException 异常
        currentUser.checkRoles("role1","role2","role3");
    }
}

权限认证配置文件:

[users]
liwei=123456,role1,role2
zhouguang=123456,role1
[roles]
role1=user:select role2=user:add,user:update,user:delete

测试代码:

/** * Created by Liwei on 2016/2/9. */
public class PermissionTest {

    @Test
    public void testIsPermitted(){
        Subject currentUser = ShiroUtil.login("classpath:shiro_permission.ini", "liwei", "123456");
        System.out.println(currentUser.isPermitted("user:select")); System.out.println(currentUser.isPermitted("user:update")); System.out.println(currentUser.isPermitted("user:add")); System.out.println(currentUser.isPermitted("user:delete")); // 测试是否分别有指定的权限 boolean[] results = currentUser.isPermitted("user:select","user:update","user:add","user:delete"); for(boolean result:results){ System.out.println(result); } // 测试是否拥有全部的权限 System.out.println(currentUser.isPermittedAll("user:select","user:update","user:add","user:delete")); currentUser.logout(); } @Test public void testCheckPermitted(){ Subject currentUser = ShiroUtil.login("classpath:shiro_permission.ini", "liwei", "123456"); currentUser.checkPermission("user:select"); currentUser.checkPermissions("user:select","user:update","user:add","user:delete"); currentUser.logout(); } } 

你可能感兴趣的:(shiro)