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,方便我们调用。
一、基于角色的身份判断
准备配置文件,shiro_role.ini,用于描述用户的登录信息以及角色信息。
然后创建junt Test Cas,进行测试:
准备配置文件,shiro_permissopn.ini,用于描述用户的登录信息以及角色和权限信息。
然后创建junt Test Cas,进行测试:
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三个权限不都有"); } }测试结果,大家自己运行下就好了。
相关文章推荐
- java synchronized详解
- Java Websocket——服务器端
- java学习之编译时类型和运行时类型
- Spring常用注解
- Spring常用注解
- java分页数据导出excel
- Java学习笔记之二
- java单例 生成唯一的标识
- 方法重写与重载
- java_basic_review(5)java反射荔枝
- Struts2方法调用的三种方式(默认、多方法、通配符)
- 华为机试---矩阵元素相乘
- 《Thinkinginjava》第9章-接口
- java继承特点、好处、继承中构造方法间的关系、super、
- Eclipse mars 实用快捷键
- JAVA 中BIO,NIO,AIO的理解
- 《Thinkinginjava》第8章-多态
- java的关键字synchronized用法总结
- Java泛型中通配符的使用
- 使用hibernate自动生成实体类时同时出现两个.java文件