Shiro笔记---授权
1.搭建shiro环境(*)
idea2018.2、maven3.5.4、jdk1.8
项目结构:
pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.zyu</groupId> <artifactId>idea_shiro_demo03</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.2.4</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.12</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.10</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency> </dependencies> </project>
shiro_role_permission.ini
[users]
superbird=123456,system
bigbird=123,role1,role2
[roles]
system=InRoom:select,InRoom:insert,InRoom:xiaoFei,InRoom:update,VIP:select,VIP:gaunli,VIP:add
role1=InRoom:xiaoFei
role2=VIP:select,VIP:add
【users】
用户名=密码,角色
【roles】
角色=对应的权限
ShiroUtil(封装对应的身份验证方法 --- 只有先登录之后才能判断权限):
public class ShiroUtil { public static Subject login(String configPath,String username,String password) { //找资源:ctrl+shift+n //核心类:SecurityManager Factory<SecurityManager> factory = new IniSecurityManagerFactory(configPath); SecurityManager securityManager = factory.getInstance(); //当前用户Subject SecurityUtils.setSecurityManager(securityManager); Subject user = SecurityUtils.getSubject(); //模拟用户输入用户名与密码 UsernamePasswordToken token = new UsernamePasswordToken(username,password); try { user.login(token); System.out.println("登录成功"); } catch (AuthenticationException e) { System.out.println("登录失败"); } return user; } }
判断用户所拥有的角色(一个用户对应的角色可以是一个,也可以是多个)
public class ShiroDemo { public static void main(String[] args) { Subject user = ShiroUtil.login("classpath:shiro_role_permission.ini", "bigbird", "123"); //判断用户是否拥有某个角色 boolean flag1 = user.hasRole("system"); // System.out.println("flag1="+flag1); List<String> roles = Arrays.asList("role1", "role2","system"); boolean[] flags = user.hasRoles(roles); System.out.println(Arrays.toString(flags)); } }
判断用户是否拥有某个具体的权限
public class ShiroDemo01 { public static void main(String[] args) { //判断bigbird=123的用户是否具有某个具体的权限 Subject user = ShiroUtil.login("classpath:shiro_role_permission.ini", "bigbird", "123"); boolean flag1 = user.isPermitted("InRoom:xiaoFei"); //System.out.println("flag1="+flag1); //判断某个用户是否同时具有多个权限 boolean[] flags = user.isPermitted("InRoom:xiaoFei", "InRoom:update"); // System.out.println("flags="+ Arrays.toString(flags)); try { user.checkPermission("InRoom:xiaoFei"); System.out.println("bigbird有消费记录权限"); } catch (AuthorizationException e) { System.out.println("bigbird有没有消费记录权限"); } } }