使用IniRealm来读取配置文件中的认证及权限信息
使用IniRealm来读取配置文件中的认证及权限信息
检查是否有角色是否有权限
角色和权限信息的文件的写法
设置的内容如图所示
文件内容是这么写的
这里是引入文件的Realm
Realm验证:
1,IniRealm iniRealm = new IniRealm("classpath:user.ini")
2,user.ini配置信息如图:
Realm验证:
1,SimpleAccountRealm:用作开发测试用:如图
文件66666666666
333333333333333
查看用户角色、权限
自定义Realm(内置Realm)
@Test public void testAuthentication(){ 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("wakeng","123456"); subject.login(token); System.out.println("login isAuthenticated : "+subject.isAuthenticated()); subject.checkRole("admin"); subject.checkPermission("user:updata"); subject.logout(); System.out.println("logout isAuthenticated : "+subject.isAuthenticated()); }
[users] wakeng=123456,admin [roles] admin=user:delete,user:updata
iniRealm
shiro
IniRealm配置文档示例
@Test public void testAuthentication(){ 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("wakeng","123456"); subject.login(token); System.out.println("login isAuthenticated : "+subject.isAuthenticated()); subject.checkRole("admin"); subject.checkPermission("user:updata"); subject.logout(); System.out.println("logout isAuthenticated : "+subject.isAuthenticated()); }
[users] wakeng=123456,admin [roles] admin=user:delete,user:updata
user.ini
iniRealm
checkPermission("user:update")
IniRealm讲解-user.ini文件配置
user.ini
InitRealmTest.java
Shiro的IniRealm 形式:此形式主要是将数据存放到相应的user.ini即文件系统中,通过给定的格式,从文件中查找相应的数据是否存在。
步骤:
1.删除之前SimpleAccountRealm,在实体中创建IniRealm并实例化。在构造方法中传入相应的user.ini地址。此文件地址一般写为:classpath:user.ini的形式。
需要在相应的包中建立resource文件夹,并且放入user.ini文件。
2.user.ini文件的定义格式为:[users] 用户名=密码,角色 [roles] 角色=权限名(例子:amdin=user:delete,user:update)
3.与之前认证与授权步骤一样,直接将IniRealm放入到SecurityManager中,进行登录认证,之后进行checkRoles验证与checkPersimmon验证权限等操作即可。
自定义IniRealm
在src/main/resources中创建user.ini
内容为:
[users]
Mark1=123,admin admin是role
[roles]
admin=user:delete 拥有删除用户的权限
public class IniRealmTest {
//Realm:领域,范围
@Test
public void testAuthentication() {
//路径
IniRealm realm=new IniRealm("classpath:user.ini");
//获取安全管理者对象------DefaultSecurityManager默认管理者
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
//设置管理者的管理领域
defaultSecurityManager.setRealm(realm);
//SecurityUtils操作securityManager的工具类,提供了getSecurityManager和setSecurityManger,getSubject的方法
//此处是给工具类默认管理者对象
SecurityUtils.setSecurityManager(defaultSecurityManager);
//获取Subject对象,可以进行login 登陆 和logout 登出方法
Subject subject = SecurityUtils.getSubject();
//用户+密码的token令牌
UsernamePasswordToken token = new UsernamePasswordToken("Mark1", "123");
//登入
subject.login(token);
//如果token中的密码和用户名,在上面的用户中,那么会返回true,反之则是false
System.out.println("isAuthenticated:" + subject.isAuthenticated());
//登出
subject.logout();
//因为登出了,会返回false
System.out.println("isAuthenticated:" + subject.isAuthenticated());
}
}
@Test
public void testIniRealm() {
IniRealm iniRealm = new IniRealm("classpath:user.ini");
//1.构建SecurityManager环境
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
defaultSecurityManager.setRealm(iniRealm);
//2.主体提交认证请求
SecurityUtils.setSecurityManager(defaultSecurityManager);
Subject subject = SecurityUtils.getSubject();
//3.提交登陆
UsernamePasswordToken token = new UsernamePasswordToken("test","123456");
subject.login(token);
System.out.println("isAuthenticated = " + subject.isAuthenticated()); //是否认证
subject.checkRole("admin"); //查看权限角色
subject.checkPermission("user:delete"); //是否具备用户删除的权限
subject.checkPermission("user:update"); //是否具备用户更新的权限
}
配置文件
iniRealm
iniRealm