// Shiro 示例代码
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
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.apache.shiro.util.Factory;
public class ShiroExample {
public static void main(String[] args) {
// 1. 创建 SecurityManager 并设置到全局环境
Factory<SecurityManager> factory = new IniSecurityManagerFactory("shiro.ini");
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
// 2. 获取当前用户(Subject)
Subject currentUser = SecurityUtils.getSubject();
// 3. 创建用户名/密码身份验证 token
UsernamePasswordToken token = new UsernamePasswordToken("admin", "12345");
try {
// 4. 登录,即验证用户身份
currentUser.login(token);
System.out.println("User [" + currentUser.getPrincipal() + "] logged in successfully.");
// 5. 检查角色和权限
if (currentUser.hasRole("admin")) {
System.out.println("User has the 'admin' role.");
}
if (currentUser.isPermitted("user:delete")) {
System.out.println("User is permitted to delete users.");
}
} catch (AuthenticationException e) {
// 6. 处理登录失败的情况
System.out.println("Login failed: " + e.getMessage());
}
// 7. 登出
currentUser.logout();
System.out.println("User logged out.");
}
}
步骤 1:通过 IniSecurityManagerFactory 创建一个 SecurityManager 实例,并将其设置为全局的 SecurityManager。这一步是 Shiro 初始化的核心。
步骤 2:使用 SecurityUtils.getSubject() 获取当前用户的 Subject 对象,Subject 表示当前的安全上下文(即用户)。
步骤 3:创建一个 UsernamePasswordToken 对象,用于存储用户名和密码,作为登录凭证。
步骤 4:调用 login() 方法进行用户身份验证。如果验证成功,则表示用户已登录;否则会抛出 AuthenticationException 异常。
步骤 5:检查用户是否具有特定的角色或权限。Shiro 提供了简单易用的 API 来验证用户的角色和权限。
步骤 6:捕获并处理可能的认证异常,如用户名或密码错误等情况。
步骤 7:调用 logout() 方法使用户退出系统,清除当前用户的会话信息。
这段代码展示了如何使用 Apache Shiro 进行基本的身份验证和授权操作。
上一篇:java abstract用法
下一篇:java基本语法
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站