您的位置:首页 > 编程语言 > Java开发

java安全框架-Shiro学习笔记(三)-权限认证

2016-06-27 21:27 1441 查看
权限认证:
1、权限认证核心要素

权限认证,也就是访问控制,即在应用中控制谁能访问哪些资源。
在权限认证中,最核心的三个要素是:权限,角色和用户。

权限:即操作资源的权利,比如访问某个页面,以及某个模块的数据的添加,修改 ,删除,查看的权利;
角色:是权限的集合,一个角色可以包含多个权限
用户:在shiro中,代表访问系统的用户,即Subject

2、授权

1)编程式授权

a)基于角色的访问控制
b)基于权限的访问控制

2)注解式授权
3)Jsp标签授权

由于测试的方法多,这里我们需要引入单元测试Junit,同样在pom.xml中加入Junit的依赖jar包。



封装我们的shiro登录,做一个ShiroUtil,方便我们调用。
package com.feiyang.util;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

public class ShiroUitl {
public static Subject login(String configFile, String userName, String password) {
// 读取配置文件,初始化SecurityManager工厂
Factory<SecurityManager> factory = new IniSecurityManagerFactory(configFile);
// 获取securityManager实例
SecurityManager securityManager = factory.getInstance();
// 把securityManager实例绑定到SecurityUtils
SecurityUtils.setSecurityManager(securityManager);
// 得到当前执行的用户
Subject subject = SecurityUtils.getSubject();
// 创建token令牌,用户名/密码
UsernamePasswordToken token = new UsernamePasswordToken(userName, password);
try{
//身份验证
subject.login(token);
System.out.println("身份登录成功 ");
}catch(Exception e){
e.printStackTrace();
System.out.println("身份登录成失败");
}
return subject;
}
}

一、基于角色的身份判断

准备配置文件,shiro_role.ini,用于描述用户的登录信息以及角色信息。



然后创建junt Test Cas,进行测试:
package com.feiyang.shiro;
import java.util.Arrays;
import org.apache.shiro.subject.Subject;
import org.junit.Test;
import com.feiyang.util.ShiroUitl;
public class RoleTest {
@Test
public void testHasRole() {
System.out.println("---------判断是否有role1角色------------");
Subject subject =ShiroUitl.login("classpath:shiro_role.ini", "feiyang", "123456");
boolean hasRole = subject.hasRole("role1");
System.out.println(hasRole?"有role1角色":"没有role1角色");
System.out.println("---------判断是否有role1,role2,role3角色------------");
boolean[] hasRoles = subject.hasRoles(Arrays.asList("role1","role2","role3"));
System.out.println(hasRoles[0]?"有role1角色":"没有role1角色");
System.out.println(hasRoles[1]?"有role2角色":"没有role2角色");
System.out.println(hasRoles[2]?"有role3角色":"没有role3角色");
subject.hasRoles(Arrays.asList("role1","role2","role3"));
System.out.println("---------判断是否拥有role1,role2,role3三个权限------------");
System.out.println(subject.hasAllRoles(Arrays.asList("role1","role2","role3"))?"具备role1,role2,roel3三个角色":"不具备role1,role2,roel3三个角色");
}

}
二、基于权限的身份判断

准备配置文件,shiro_permissopn.ini,用于描述用户的登录信息以及角色和权限信息。



然后创建junt Test Cas,进行测试:
package com.feiyang.shiro;

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

import com.feiyang.util.ShiroUitl;

public class PermissionTest {

@Test
public void testPermitted() {
Subject subject = ShiroUitl.login("classpath:shiro_permission.ini","feiyang", "123456");
//单个权限的判断
System.out.println(subject.isPermitted("user:select")?"有user:select权限":"没有user:select权限");
System.out.println(subject.isPermitted("user:delete")?"有user:delete权限":"没有user:delete权限");
//多个权限的判断
subject.isPermitted("user:delete","user:select");
//全部权限的判断
}
@Test
public void testPermitted2() {
//多个权限的判断
Subject subject = ShiroUitl.login("classpath:shiro_permission.ini","jack", "1234");
boolean[] permitted = subject.isPermitted("user:delete","user:select");
System.out.println(permitted[0]?"有user:delete权限":"没有user:delete权限");
System.out.println(permitted[1]?"有user:select权限":"没有user:select权限");

}	@Test
public void testPermitted3() {
//全部权限的判断
Subject subject = ShiroUitl.login("classpath:shiro_permission.ini","feiyang", "123456");
System.out.println(subject.isPermittedAll("user:select","user:delete","user:add")?
"user:select,user:delete,user:add三个权限都有":"ser:select,user:delete,user:add三个权限不都有");

}
}
测试结果,大家自己运行下就好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: