shiro_permis.ini配置文件
[users]
java1234=123456,role1,role2
jack=123,role1
[roles]
role1=user:select
role2=user:select.user:add,user:delete,user:update
shiroutil.java 工具类
package com.java1234.shiro;
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;
public class shiroutil {
public static Subject SecurityUserlogi(String path,String user,String psw)throws AuthenticationException {
Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:"+path);
//获取SecurityManager实例
SecurityManager securitymanager=factory.getInstance();
//把SecurityManager实例绑定SecurityUtils
SecurityUtils.setSecurityManager(securitymanager);
//得到当前执行的账户
Subject SecurityUser = SecurityUtils.getSubject();
//创建令牌
UsernamePasswordToken Token=new UsernamePasswordToken(user,psw);
try {
//身份验证
SecurityUser.login(Token);
System.out.println("登录成功");
}catch(AuthenticationException e) {
System.out.println("登录失败");
e.printStackTrace();
}
return SecurityUser;
}
}
测试文件
package com.java1234.shiro;
import static org.junit.Assert.*;
import java.util.Arrays;
import org.apache.shiro.subject.Subject;
import org.junit.Test;
public class shirotest {
/***
* 判断是否有指定角色
*/
@Test
public void test() {
Subject SecurityUser = shiroutil.SecurityUserlogi("shiro_role.ini","jack","123");
System.out.println(SecurityUser.hasRole("role1")?"有role1这个角色":"没有role1这个角色");
System.out.println(SecurityUser.hasRole("role2")?"有role2这个角色":"没有role2这个角色");
}
/***
* hasRoles能判断多个角色
*/
@Test
public void test1() {
Subject SecurityUser = shiroutil.SecurityUserlogi("shiro_role.ini","jack","123");
boolean[]ss=SecurityUser.hasRoles(Arrays.asList("role1","role2"));
System.out.println(ss[0]?"有role1":"无role1");
System.out.println(ss[1]?"有role2":"无role2");
}
/***
* checkRole和checkRoles通过不返回信息,不通过则报异常
*/
@Test
public void test2() {
Subject SecurityUser = shiroutil.SecurityUserlogi("shiro_role.ini","jack","123");
SecurityUser.checkRole("role1");
SecurityUser.checkRoles(Arrays.asList("role1","role2"));
}
/***
* isPermitted判断是否有次权限
*/
@Test
public void test3() {
Subject SecurityUser = shiroutil.SecurityUserlogi("shiro_permis.ini","java1234","123456");
System.out.println(SecurityUser.isPermitted("user:delect")?"有次权限":"无此权限");
}
/***
* isPermitted判断多个权限
*/
@Test
public void test4() {
Subject SecurityUser = shiroutil.SecurityUserlogi("shiro_permis.ini","jack","123");
boolean []ss=SecurityUser.isPermitted("user:delete","user:select","user:update");
System.out.println(ss[0]?"有":"无");
System.out.println(ss[1]?"有":"无");
System.out.println(ss[2]?"有":"无");
}
/***
* isPermitted判断是否拥有多个权限
*/
@Test
public void test5() {
Subject SecurityUser = shiroutil.SecurityUserlogi("shiro_permis.ini","java1234","123456");
System.out.println(SecurityUser.isPermittedAll("user:delete","user:select","user:update")?"有":"无");
}
}