认证:验证用户是否合法
在 shiro 中,用户需要提供principals (身份)和credentials(凭证)给shiro,从而实现对用户身份的验证。
---principals
身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。
例如:用户名/邮箱/手机号等
----credentials
凭证,即只有主体知道的安全值,如密码/数字证书等。最常见的principals和credentials组合就是用户名/密码了
实现:
jar文件:
shiro.ini配置:
测试代码:
package com.sxt.test;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.junit.Test;
public class TestAuthentication {
@Test
public void TestLogin(){
// 1. 构建安全管理SecurityManager工厂
IniSecurityManagerFactory securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
//默认是在src下加载文件名为shiro.ini的文件
// IniSecurityManagerFactory securityManagerFactory = new IniSecurityManagerFactory();
// 2. 通过securityManagerFactory工厂获取SecurityManager实例
SecurityManager securityManager = securityManagerFactory.getInstance();
// 3. 将securityManager设置到运行环境当中
SecurityUtils.setSecurityManager(securityManager);
// 4. 获取subject实例
Subject subject = SecurityUtils.getSubject();
// 5. 创建用户名密码验证令牌Token
UsernamePasswordToken token = new UsernamePasswordToken("root","0100");
// 6. 进行身份验证
subject.login(token);
// 7. 判断是否认证通过
System.out.println(subject.isAuthenticated());
}
}
构建安全管理工厂是通过new IniSecurityManagerFactory()类。
- 用户名不存在会报异常UnknownAccountException
2. 密码错误会报异常IncorrectCredentialsException