- 创建项目,引入jar包
创建maven 在pom.xml文件中引入jar
<?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>chang</groupId>
<artifactId>test_shiro01</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.3</version>
</dependency>
</dependencies>
- 声明shiro的主配置文件shiro.ini
[users]
#zhangsan有两个角色 role1,role2
zhangsan=123,role1,role2
lisi=111,role2
zhaoliu=123456,role4
[roles]
#role1是自定义的一个角色名称,角色名称后是角色可以操作的资源
role1=user:list.user:add,user:delete,user:update
role2=user:list
#为角色定义可操作资源的时候可以使用通配符* *也可以省略
user3=user
#定义角色role4有删除编号为5的用户的权限
role4=user:delete5
- 创建测试类
package com.chang.shiro.test;
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;
import java.util.ArrayList;
import java.util.List;
public class Test01 {
public static void main(String[] args) {
Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager=factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
String username="zhangsan";
UsernamePasswordToken token = new UsernamePasswordToken(username, "123");
try{
subject.login(token);
System.out.println("登录成功");
boolean role1 = subject.hasRole("role1");
if(role1){
System.out.println(username+"有role1的角色");
}else {
System.out.println(username+"没有role1的角色");
}
List<String> roles=new ArrayList<String>();
roles.add("role1");
roles.add("role4");
boolean[] booleans = subject.hasRoles(roles);
for (boolean boo:
booleans) {
System.out.println(boo);
}
if (subject.isPermitted("user:list")){
System.out.println(username+"有删除用户的权限");
}else {
System.out.println(username+"没有删除用户的权限");
}
if (subject.isPermittedAll("user:list","user:update")){
System.out.println(username+"同时有查看用户列表和更新的权利");
}else {
System.out.println(username+"没有同时查看用户列表和更新的权利");
}
if (subject.isPermitted("user:delete:5")){
System.out.println(username+"有删除用户5的权限");
}else {
System.out.println(username+"没有删除用户5的权限");
}
}catch (AuthenticationException e){
e.printStackTrace();
System.out.println("用户名或密码错误");
}
subject.logout();
}
}
- 测试结果
登录成功
zhangsan有role1的角色
true
false
zhangsan有删除用户的权限
zhangsan同时有查看用户列表和更新的权利
zhangsan有删除用户5的权限