1. 首页
  2. 软件开发
  3. Shiro——登录认证源码详解,如何使用Shiro进行用户身份验证。

Shiro——登录认证源码详解,如何使用Shiro进行用户身份验证。

  • 发布于 2024-08-17
  • 2 次阅读

本文以一个简单的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