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

来源:互联网 发布:哪些手机可以刷ubuntu 编辑:程序博客网 时间:2024/05/16 13:51
权限认证:
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实例绑定到SecurityUtilsSecurityUtils.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 {@Testpublic 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 {@Testpublic 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");//全部权限的判断}@Testpublic 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权限");}@Testpublic 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三个权限不都有");}}
测试结果,大家自己运行下就好了。

0 0