本文共 4044 字,大约阅读时间需要 13 分钟。
权限认证,也就是访问控制,即在应用中控制谁能访问哪些资源。
在权限认证中,最核心的三个要素是:权限,角色和用户;授权分为编程式授权、注解式授权、jsp标签授权。
这篇文章,我们主要讲解编程式授权的基于角色的访问控制和基于权限的访问控制。
[users]java1234=123456,role1,role2jack=123,role1上面我们定义用户名java1234,密码为123456,拥有role1和role2角色。用户名jack密码为123,拥有role1角色。
package com.tgb.shiro;import java.util.Arrays;import org.apache.shiro.subject.Subject;import org.junit.Test;import com.tgb.common.ShiroUtil;public class RoleTest { @Test public void testHasRole() { Subject currentUser = ShiroUtil.login("classpath:shiro_role.ini", "java1234", "123456"); System.out.println(currentUser.hasRole("role1") ? "有role1这个角色" : "没有role1这个角色"); // 每个角色进行判断 boolean[] results = currentUser.hasRoles(Arrays.asList("role1", "role2", "role3")); System.out.println(results[0] ? "有role1这个角色" : "没有role1这个角色"); System.out.println(results[1] ? "有role2这个角色" : "没有role2这个角色"); System.out.println(results[2] ? "有role3这个角色" : "没有role3这个角色"); // 判断是否同时有role1。role2角色 System.out.println(currentUser.hasAllRoles(Arrays.asList("role1", "role2")) ? "有role1、role2这两个角色" : "role1、role2这两个角色不全有"); currentUser.logout(); }}hasRole判断java1234是否拥有role1角色,hasRoles是分别判断java1234是否拥有role1、role2、role3角色,hasAllRoles判断java1234是否同时拥有role1和role2角色。 和hasRole类似的还有checkRole、checkRoles方法对用户角色进行判断。
[users]java1234=123456,role1,role2jack=123,role1[roles]role1=user:selectrole2=user:add,user:update,user:delete上面我们定义用户名java1234,密码为123456,拥有role1和role2角色;用户名jack密码为123,拥有role1角色。接着我们定义role1的权限为user:select,role2的权限为user:add,user:update,user:delete。
package com.tgb.shiro;import org.apache.shiro.subject.Subject;import org.junit.Test;import com.tgb.common.ShiroUtil;public class PermissionTest { @Test public void testIsPermitted() { Subject currentUser = ShiroUtil.login("classpath:shiro_permission.ini", "java1234", "123456"); System.out.println(currentUser.isPermitted("user:select") ? "有user:select这个权限" : "没有user:select这个权限"); boolean[] results = currentUser.isPermitted("user:select", "user:update", "user:delete"); System.out.println(results[0] ? "有user:select这个权限" : "没有user:select这个权限"); System.out.println(results[1] ? "有user:update这个权限" : "没有user:update这个权限"); System.out.println(results[2] ? "有user:delete这个权限" : "没有user:delete这个权限"); System.out.println(currentUser.isPermittedAll("user:select", "user:update") ? "有user:select,user:update这两个权限" : "没有user:select,user:update这两个权限"); currentUser.logout(); }}isPermitted判断java1234是否拥有user:select权限,还可以分别判断java1234是否拥有user:select、user:update、user:delete权限,isPermittedAll判断java1234是否同时拥有user:select,user:update权限。
转载地址:http://bokui.baihongyu.com/