简单的测试实例
1.导入依赖
<!-- shiro -->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.1</version>
</dependency>
2.在resources下创建shiro.ini文件
[users]
// 用户=密码,角色
zhangsan=123456,seller
lisi=123123,ckmgr
admin=admin,admin
[roles]
// 角色=权限
admin=*
seller=order-add,order-del,order-list
ckmgr=ck-add,ck-del,ck-list
3.测试案例
public class ShiroDemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入账号:");
String username = sc.next();
System.out.println("请输入密码:");
String password = sc.next();
//1.创建安全管理器
DefaultSecurityManager securityManager=new DefaultSecurityManager();
//2.创建realm
IniRealm iniRealm=new IniRealm("classpath:shiro.ini");
//3.将realm设置给安全管理器
securityManager.setRealm(iniRealm);
//4.将Realm设置给SecurityUtil工具
SecurityUtils.setSecurityManager(securityManager);
//5.通过SecurityUtil工具类获取subject对象
Subject subject=SecurityUtils.getSubject();
//认证流程
//将认证账号和密码封装到token中
UsernamePasswordToken token=new UsernamePasswordToken(username,password);
//通过subject对象调用login方法进行认证
boolean flag=false;
try{
subject.login(token);
flag=true;
}catch (IncorrectCredentialsException e){
flag=false;
}
System.out.println(flag?"登录成功":"登录失败");
//授权
//判断是否有某个角色
System.out.println(subject.hasRole("seller"));
//判断是否有某个权限
System.out.println(subject.isPermitted("order-del"));
}
}
加密
public class ShiroDemo2 {
public static void main(String[] args) {
// 初始密码
String password = "123456";
// 生成盐值
String salt = new SecureRandomNumberGenerator().nextBytes().toString();
// 表示加密操作的循环次数 多次迭代可以增加密码的复杂度
int times = 2; // 加密次数:2
// 更安全的算法:如 SHA-256 或 bcrypt。
String alogrithmName = "md5"; // 加密算法
// 对原始密码进行加密
String encodePassword = new SimpleHash(alogrithmName, password, salt, times).toString();
// 输出
System.out.printf("原始密码是 %s , 盐是: %s, 运算次数是: %d, 运算出来的密文是:%s ",password,salt,times,encodePassword);
}
}