初识shiro
shiro官网 https://shiro.apache.org/
官方文档 https://shiro.apache.org/reference.html
学习视频 https://www.bilibili.com/video/BV1uz4y197Zm
shiro架构图
快速上手案例
创建个maven项目
pom.xml
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.7.1</version>
</dependency>
在resource下创建shiro.ini 文件,文件名不固定
[users]
zhangsan=123
lisi=456
root=root
admin=admin
package com.jing;
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.Realm;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;
public class TestAuthenticator {
public static void main(String[] args) {
// 使用默认的 安全管理器
DefaultSecurityManager securityManager = new DefaultSecurityManager();
// 将安全管理器设置问使用配置文件
securityManager.setRealm(new IniRealm("classpath:shiro.ini"));
// 使用全局安全工具类将 安全管理器添加进来
SecurityUtils.setSecurityManager(securityManager);
// 获取 主体(用户)
Subject subject = SecurityUtils.getSubject();
// 将用户名和密码封装为token
UsernamePasswordToken token = new UsernamePasswordToken("admin","admin");
// 判断是否登录
boolean authenticated = subject.isAuthenticated();
System.out.println("authenticated = " + authenticated);
// 登录验证是否存在,不存在抛出异常
try {
subject.login(token);
authenticated = subject.isAuthenticated();
System.out.println("authenticated = " + authenticated);
// 查看登录的用户
Object principal = subject.getPrincipal();
System.out.println("principal = " + principal);
}catch (IncorrectCredentialsException e){
e.printStackTrace();
System.out.println("密码错误");
}catch (UnknownAccountException e){
e.printStackTrace();
System.out.println("用户名出错");
}
}
}
这里有两个常见的异常
IncorrectCredentialsException:该异常是密码错误
UnknownAccountException:该异常是用户名错误