shiro (三)权限角色判断

本文深入探讨了Apache Shiro框架中如何进行权限和角色的判断,通过配置shiro_permis.ini文件来实现精细的权限控制。了解如何设置用户角色、分配权限,并在实际应用中进行验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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")?"有":"无");
	}
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值