备注:idea如何建资源文件,与eclipse有点不同,需先建目录,在将目录 Mark为资源文件,如图
package com.xiangshuai.test; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.UsernamePasswordToken; import org.apache.shiro.mgt.DefaultSecurityManager; import org.apache.shiro.realm.text.IniRealm; import org.apache.shiro.subject.Subject; import org.junit.Test; /** * @author lqx IniReal * @create 2019-03-03 18:24 * ini文件需 * File->setting->Plugins->Browse Repositories->搜索ini4idea 下载后并安装 * usesr.ini 在src的资源文件resources下的 user.ini,内容如下 * #定义用户 [users] #用户名 zhang3 密码是 12345, 角色是 admin zhang3=12345,admin #用户名 xiaohong 密码是 12345, 角色是 程序员,也是管理员 xiaohong=123,cxy,admin #用户名 li4 密码是 abcde, 角色是 产品经理 li4 =abcde,productManager #定义角色 [roles] #管理员对user什么都能做 admin=user:* #程序员能有删除用户权限,以及update权限 cxy=user:delete,user:update #产品经理只能做产品管理 productManager=addProduct,deleteProduct,editProduct,updateProduct,listProduct pom.mxl如下 <?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>com.xiangshuai</groupId> <artifactId>xiangshuai-shiro</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>shiro-test</module> </modules> </project> * * E:\学习文档子目录压缩\框架\shiro\shiro安全框架入门\复习步骤3-获取权限数据IniRealm提供subject桥梁 - ini配置用户权限角色等信息 或 或 我的网盘/我的笔记/学习文档子目录压缩/框架/shiro/shiro安全框架入门/复习步骤3-获取权限数据IniRealm提供subject桥梁 - ini配置用户权限角色等信息
*
*/
public class IniRealmTest {
@Test
public void testIniRealmTest(){
IniRealm iniRealm=new IniRealm("classpath:user.ini");//新建Real user.ini配置文件中获取信息到Real中
//创建SecurityManger环境,手动添加个Reals到创建SecurityManger环境中
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
defaultSecurityManager.setRealm(iniRealm);
//主体Subject主动提交认证请求
SecurityUtils.setSecurityManager(defaultSecurityManager);
Subject subject = SecurityUtils.getSubject();
// 给subject主体里面加 登录token
UsernamePasswordToken token = new UsernamePasswordToken("xiaohong","123");
subject.login(token);
//Reals 对subject和数据库(这里事模拟的)进行比对,看是否能通过验证 --true
System.out.println("subject是否通过认证:"+subject.isAuthenticated());
System.out.println("subject是否通过认证:"+subject.hasRole("admin"));//subject是否有superadmin权限
subject.checkRoles("cxy","admin");// 如果subject 没有同时没有含user和admin角色 会报 Subject does not have role [user] 这个错
// 检查subject是否有如下权限
subject.checkPermissions("ss:insert");// 如果subject没有这个权限,就会报[ss:insert]
/*
IniRealm iniRealm = new IniRealm("classpath:user.ini");
//1.构建SecurityManager
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
defaultSecurityManager.setRealm(iniRealm);
//2.主体提交认证请求
SecurityUtils.setSecurityManager(defaultSecurityManager);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("Mark","123456");
subject.login(token);
System.out.println("isAuthenticated:"+subject.isAuthenticated());
subject.checkRole("admin");
subject.checkPermission("user:update");
*/
}
}