本次身份验证的例子是基于ini配置文件
身份验证
应用程序需要验证登录的是用户本人,用户需要提供相应信息来向应用程序表明我就是我。提供的用户信息如,用户名/密码、手机号等唯一可以表示用户身份证明的信息。
在Shiro中,用户需要提供身份(principals)和证明(credentials)给Shiro,从而可以帮助应用程序验证用户的身份合法性。
身份(principals)
用户主体的标识属性,可以是任何信息,但是必须保证该信息是唯一的。如用户名、手机号等。一个用户可以有多个身份信息,但是必须有一个唯一主身份。一般是用户名/密码。
证明/凭证(credentials)
只有用户知道的可以去验证用户身份的安全值,如密码、数字证书等。
下面我们来使用Shiro做一个简单的身份验证的例子
我们使用Maven来构建项目,这样不需要我们去单独下载相关的依赖jar包了。
Maven环境依赖
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
我们通过简单的一个Java类来进行验证,所以只需要引入必要的shiro-core依赖即可。
登录/登出
- 在ini配置文件中配置出用户的信息
[users]
cuierdan=666666
erdan=888888
在ini配置文件中配置了两个用户,通过[users]来指定。
- 创建一个简单的Java类,带main()方法的。
/**
* Shiro 登录/登出 验证测试类
*
* @author CuiErdan
* @since 2020/4/100 88点88分
**/
public class FirstShiro {
public static void main(String[] args) {
}
}
下面我们添加有关Shiro身份验证的代码
/**
* Shiro 登录/登出 验证测试类
*
* @author CuiErdan
* @since 2020/4/100 88点88分
**/
public class FirstShiro {
public static void main(String[] args) {
// 1. 通过ini配置文件来创建SecurityManager 工厂
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
// 2. 实例化SecurityManager
SecurityManager securityManager = factory.getInstance();
// 3. 将SecurityManager 绑定给SecurityUtils 工具上 ,SecurityUtils 类 是一个全局的配置类,设置一次就可以了。
SecurityUtils.setSecurityManager(securityManager);
// 4. 通过SecurityUtils 类,得到Subject ,SecurityUtils会将Subject类自动绑定到当前线程。
//如果是Web环境在请求结束时需要解除绑定。
Subject subject = SecurityUtils.getSubject();
// 5. 根据用户名/密码获取用于身份验证的Token。
UsernamePasswordToken token = new UsernamePasswordToken("cuierdan","666666");
try {
// 6. 将用户用于验证身份的Token,传入到login(),进行登录。
//因为Subject是由SecurityManager 管理的,
//所以Shiro会自动委托给SecurityManager.login()方法进行登录。
subject.login(token);
System.out.println("成功");
}catch (AuthenticationException e){
// 7. 如果认证失败,根据相应的异常返回对应的提示信息。
System.out.println("失败");
}
// 8. 当身份验证成功,用户信息合法,可以调用登出logout()方法,
//将该用户进行登出操作。Shiro会自动委托给SecurityManager.logout()方法。
//实现登出操作。
subject.logout();
System.out.println("已退出");
}
}
运行本Java类,得到如下结果,验证成功。
D:\ProgramFiles\Java\jdk1.8.0_181\bin\java.exe ...
成功
已退出
Process finished with exit code 0
可以去修改代码中的用户名或密码,会得到相应验证的结果。
到此第一个Shiro简单验证的例子就结束了。