shiro基于ini文件入门案例
shiro基于ini文件入门案例
1、导包
如果测试类不在测试环境下,则改变依赖作用范围为compile
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.1</version>
</dependency>
<!-- Shiro uses SLF4J for logging. We'll use the 'simple' binding
in this example app. See http://www.slf4j.org for more info. -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.21</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
2、创建ini文件
文件放在类路径下
# 配置用户
[users]
yl01=1111,role1
yl02=1111,role2
yl03=1111,role1,role2
yl04=1111,role3
# 配置角色
[roles]
role1=user:query,user:add,user:update,user:delete,user:export
role2=user:query,user:add
role3=*:*
3、测试
package com.yl.shiro;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.AuthenticationToken;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;
/**
* 测试类
*/
public class ShiroTest {
//日志输出工具
private static final transient Logger log = LoggerFactory.getLogger(ShiroTest.class);
public static void main(String[] args) {
log.info("My First Apache Shiro Application");
//创建安全管理器的工厂对象
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//使用工厂创建安全管理器对象
SecurityManager securityManager = factory.getInstance();
//把安全管理器绑定到当前线程
SecurityUtils.setSecurityManager(securityManager);
//得到主体对象
Subject currentUser = SecurityUtils.getSubject();
//封装用户对象
AuthenticationToken token=new UsernamePasswordToken("yl01","1111");
//进行认证
try {
currentUser.login(token);
System.out.println("认证通过");
} catch (AuthenticationException e) {
System.out.println("用户名或密码错误");
}
//判断用户是否认证通过
boolean authenticated=currentUser.isAuthenticated();
//单个角色判断
boolean role2=currentUser.hasRole("role1");
//批量角色分开判断
boolean[] booleans=currentUser.hasRoles(Arrays.asList("role1","role2"));
//批量角色同时判断
boolean allRoles=currentUser.hasAllRoles(Arrays.asList("role1","role2"));
//用户单个权限判断
boolean permitted=currentUser.isPermitted("user:query");
//用户多个权限分开判断
boolean[] permitted1=currentUser.isPermitted("user:query","user:add");
//用户多个权限同时判断
boolean permittedAll=currentUser.isPermittedAll("user:add","user:add","user:query");
//用户注销
currentUser.logout();
}
}
记得快乐
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!