什么是认证
也就是身份认证,就是判断一个用户是否为合法用户的处理过程,通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令是否一致,来判断用户的身份是否正确。
关键对象
对面名称 | 概述 |
Subject(主体) | 用户 |
Principal(身份信息) | 是主体(Subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等 |
Credential(凭证信息) | 是只有主体自己知道的安全信息,如密码、证书等 |
使用 ini 完成认证
在 Maven 中添加依赖 jar包,修改 pom.xml 依赖如下所示:
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
logging
依赖是 Shiro 所依赖的包你尽管添加就行。
添加 Shiro.ini 配置文件,首先准备一些用户身份和凭据信息(Shiro.ini)内容如下所示:
如上是在 Shiro.ini 中定义了两个用户一个是 BNTang 一个是 JonathanTang 密码为 1234
登录和退出
如上图的步骤分别为如下所解释的:
- 构建
SecurityManager
工厂 - 在通过工厂创建
SecurityManager
- 在将 SecurityManager 设置到运行环境中
- 在创建一个 Subject 实例
- 在创建 Token 令牌
- 用户登录
- 用户退出
最终代码如下所示:
/**
* @author BNTang
*/
public class Demo {
public static void main(String[] args) {
IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("BNTang", "1234");
try {
subject.login(token);
} catch (UnknownAccountException e) {
System.out.println("用户名不存在");
e.printStackTrace();
} catch (IncorrectCredentialsException e) {
System.out.println("密码错误");
e.printStackTrace();
}
System.out.println("是否认证" + subject.isAuthenticated());
subject.logout();
System.out.println("是否认证" + subject.isAuthenticated());
}
}