Apache Shiro 是Java 的一个安全框架。Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE 环境,也可以用在JavaEE 环境。Shiro 可以帮助我们完成:认证(登录)、授权(角色,权限)、加密(pass加密)、会话管理、与Web 集成、缓存等。
package com.xiexin.shiroTest;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
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.jupiter.api.Test;
/*
shiro的认证
shrio三大概念 subject(用户的请求 主体)
security Manager(shiro的管理类)
realms(数据库) 分为ini realm和jdbc realm 自定义的realm--常用自定义(mybatis)
*/
public class shiroini {
@Test
public void test01() {
//1.relams
IniRealm iniRealm = new IniRealm("classpath:shiro.ini");
//2.security Manager
DefaultSecurityManager sm = new DefaultSecurityManager();
sm.setRealm(iniRealm);
//以上步骤是吧realms注入到sm中 即把他们两个联系在一起 下面剩下subject了
//subject不是new出来的 因为subject是一个实打实的对象 原本就有的
//只需要shiro做一个接待就可以了
SecurityUtils.setSecurityManager(sm); //接管sm
Subject subject = SecurityUtils.getSubject();
//可以使用subject了。。。。
//拟定一个虚拟的账户名和密码 token
//错误会报错 数据库中正确的不会报错
String userName = "xiexin";
String userPwd = "123";
//在这里 利用shiro把userName和userpwd变为一个token
UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(userName, userPwd);
System.out.println("拟定一个虚拟的账户名和密码 token = " + usernamePasswordToken);
//数据库中的账户名密码 token
UsernamePasswordToken token = new UsernamePasswordToken("xiexin", "123");
System.out.println("数据库中的账户名密码 token = " + token);
try {
subject.login(usernamePasswordToken); //注意 这个登录的方法是shiro提供的 以后我们自己不写登陆
System.out.println("登陆成功");
}catch (UnknownAccountException e){
System.out.println("账号错误");
}catch (IncorrectCredentialsException e){
System.out.println("密码错误");
}
}
}