第一步先写配置文件shiro.ini,模拟数据库
shiro.ini
[users]
#模拟数据库中的数据:用户名==密码
zhangsan=888222
lisi=888
第二步编写测试程序
@Test
public void shiro01() {
//创建SecurityManage工厂对象,加载配置文件:创建工厂对象
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//通过工厂创建securityManage对象
SecurityManager securityManager = factory.getInstance();
//将securityManage绑定当前运行环境,让程序随时访问securityManage
SecurityUtils.setSecurityManager(securityManager);
//创建当前登入的主体,注意此时主体没有认证
Subject subject = SecurityUtils.getSubject();
//手机主体的身份凭证,用户名和密码
UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "88822");
try {
//主体登入
subject.login(token);
} catch (Exception e) {
//登入失败,用户名或密码错误
}
//判断登入是否成功
System.out.println("登入是否成功" + subject.isAuthenticated());
//注销
subject.logout();
System.out.println("登入是否成功" + subject.isAuthenticated());
}
为了方便可以简化一个工具类
public class FactoryUtil {
public static Subject getSubject(String path){
//创建SecurityManage工厂对象,加载配置文件:创建工厂对象
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:"+path);
//通过工厂创建securityManage对象
SecurityManager securityManager = factory.getInstance();
//将securityManage绑定当前运行环境,让程序随时访问securityManage
SecurityUtils.setSecurityManager(securityManager);
//创建当前登入的主体,注意此时主体没有认证
Subject subject = SecurityUtils.getSubject();
return subject;
}
}
在重新写测试程序:
@Test
public void test03(){
Subject subject = FactoryUtil.getSubject("shiro.ini");
UsernamePasswordToken token = new UsernamePasswordToken("lisi", "888");
try {
subject.login(token);
}catch (Exception e){
System.out.println("登入失败");
}
System.out.println(subject.isAuthenticated());
}