本文以一个简单的Shiro登录认证源码示例,展示了如何使用Shiro进行用户身份验证。
代码如下:
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
public class ShiroLoginExample {
public static void main(String[] args) {
// 创建一个SecurityManager工厂,加载shiro.ini配置文件
IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
// 获取当前用户Subject
Subject currentUser = SecurityUtils.getSubject();
// 创建一个用户名密码身份验证Token
UsernamePasswordToken token = new UsernamePasswordToken("user1", "password1");
try {
// 调用Subject的login方法进行身份验证
currentUser.login(token);
System.out.println("登录成功!");
// 检查用户是否具有特定角色
if (currentUser.hasRole("admin")) {
System.out.println("用户拥有admin角色");
} else {
System.out.println("用户没有admin角色");
}
// 检查用户是否具有特定权限
if (currentUser.isPermitted("read")) {
System.out.println("用户具有read权限");
} else {
System.out.println("用户没有read权限");
}
// 退出登录
currentUser.logout();
} catch (UnknownAccountException e) {
System.out.println("用户名不存在!");
} catch (IncorrectCredentialsException e) {
System.out.println("密码错误!");
} catch (LockedAccountException e) {
System.out.println("账号被锁定!");
} catch (AuthenticationException e) {
System.out.println("认证失败:" + e.getMessage());
}
}
}
在这段代码中,首先创建了一个 IniSecurityManagerFactory 对象来加载 shiro.ini 配置文件,然后获取当前用户的 Subject 对象。接着,创建一个 UsernamePasswordToken 对象,用于存储用户的用户名和密码信息。通过调用 currentUser.login(token) 方法进行身份验证,如果验证成功,则输出"登录成功",并检查用户是否具有特定角色和权限。最后,通过调用 currentUser.logout() 方法退出登录。
原文链接: https://blog.csdn.net/2401_82884096/article/details/138359636