Shiro 学习笔记(3)—— 授权初步
2016-02-09 12:31
369 查看
这一节是属于授权的内容,我们的例子是要说明如何判断主体是否有相应的角色和权限。
判断主体是否有相应的角色和权限
判断主体是否有相应的角色
判断主体是否有相应的权限
我们可以看到一个用户具有的角色是通过一个字符串的集合来表示的。
测试代码:
测试代码:
判断主体是否有相应的角色和权限
判断主体是否有相应的角色
判断主体是否有相应的权限
判断主体是否有相应的角色和权限
先把上一节写好的登录逻辑封装成一个工具类:import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; 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; /** * Created by liwei on 16/8/12. */ public class ShiroUtil { public static Subject login(String iniFileName, String username, String passaword) { // 注意:这里 SecurityManager 所在的包名 // 读取配置文件,初始化SecurityManager工厂 Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:" + iniFileName); SecurityManager securityManager = factory.getInstance(); // 把 securityManager 的实例绑定到 SecurityUtils 上 SecurityUtils.setSecurityManager(securityManager); // 得到当前执行的用户 Subject currentUser = SecurityUtils.getSubject(); // 自己创建一个令牌 UsernamePasswordToken token = new UsernamePasswordToken(username, passaword); try { // 身份认证 currentUser.login(token); System.out.println("登录验证通过。"); } catch (AuthenticationException e) { e.printStackTrace(); System.out.println("登录验证失败!"); } return currentUser; } }
判断主体是否有相应的角色
配置文件片段:[users] # 表示内存中有一个用户(用户名 liwei,密码 123456),他的角色是 role1 、role2 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(); } }
相关文章推荐
- Apache Shiro 使用手册(一) Shiro架构介绍
- Apache Shiro 使用手册(二) Shiro 认证
- Apache Shiro 使用手册(五) Shiro 配置说明
- Apache Shiro 使用手册(四) Realm 实现
- 详解Spring Boot 集成Shiro和CAS
- 让Apache Shiro保护你的应用
- 基于Spring框架的Shiro配置方法
- spring boot 1.5.4 集成shiro+cas,实现单点登录和权限控制
- 使用Shiro实现登录成功后跳转到之前的页面
- Spring+mybatis+shiro+freemarker+ehcache+ldap+mongo
- 第四章 INI配置
- 第五章 编码/加密
- 第六章 Realm及相关对象
- Shiro预览
- JFinal-Beetl-Shiro(JdbcRealm)-例子
- springrain技术详解
- S2SH整合Shiro之:SessionContext must be an HTTP compatible implementation
- S2SH整合Shiro之:java.lang.NoSuchMethodException: com.sun.proxy.$Proxy25
- 让Apache Shiro保护你的应用
- 第二章 身份验证——《跟我学Shiro》