第一步
public class ShiroTest
@Test
public void test1(){
// 1.获取用户输入的账号密码 假数据 模拟用户网页输入 String username = "xiaohei"; String password = "123456"; // 2.获取数据库的数据(ini配置文件) 假数据 IniSecurityManagerFactory securityManagerFactory = new IniSecurityManagerFactory("classpath:datasources.ini"); /** * SecurityManager 安全管理器对象 Shiro中的核心对象 * 在此处可以认为封装了配置文件中的用户数据 */ SecurityManager securityManager = securityManagerFactory.getInstance(); // 3.把安全管理器 给 工具类 就相当于把数据库中的数据(ini配置文件)给了Subject SecurityUtils.setSecurityManager(securityManager); // 4.获取Subject 主体 /** * 在项目中任何位置想要得到Subject 都需要通过SecurityUtils 工具类 * * 保证了单例 */ Subject subject = SecurityUtils.getSubject(); // 5.需要把用户输入的账号密码给主体 /** * Token 令牌 记录身份信息 在shiro中需要先把账号密码 封装到Token中 * 在登录的时候 将Token给Subject */ UsernamePasswordToken token = new UsernamePasswordToken(username, password); // 6.调用登录方法 /** * login 通过抛异常的方式来告诉用户有没有登录成功 * * IncorrectCredentialsException 代表密码不正确 Credential 凭证信息 就是password的意思 * * UnknownAccountException 代表账号不存在 Account 账号 * */ try{ subject.login(token); System.out.println("登录成功1"); }catch (IncorrectCredentialsException e){ System.out.println("密码不正确"); }catch (UnknownAccountException e1){ System.out.println("账号不存在"); }
if(subject.isAuthenticated()){
System.out.println(authenticated+"是否登录成功");
}
}
说明:
数据库的用户信息使用的是datasources.ini配置文件中的假数据。因为Shiro默认就是从配置文件读取信息