前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shiro认证and认证流程

Shiro认证and认证流程

原创
作者头像
杨不易呀
发布2023-11-21 15:14:01
2040
发布2023-11-21 15:14:01
举报
文章被收录于专栏:杨不易呀杨不易呀

什么是认证

也就是身份认证,就是判断一个用户是否为合法用户的处理过程,通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令是否一致,来判断用户的身份是否正确。

关键对象

对面名称

概述

Subject(主体)

用户

Principal(身份信息)

是主体(Subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等

Credential(凭证信息)

是只有主体自己知道的安全信息,如密码、证书等

使用 ini 完成认证

在 Maven 中添加依赖 jar包,修改 pom.xml 依赖如下所示:

代码语言:html
复制
<dependencies>
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>1.4.0</version>
    </dependency>

    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

logging 依赖是 Shiro 所依赖的包你尽管添加就行。

resources 下 添加 Shiro.ini 配置文件,首先准备一些用户身份和凭据信息(Shiro.ini)内容如下所示:

代码语言:java
复制
[users]
Yby6=1234
Yangbuyi=1234

如上是在 Shiro.ini 中定义了两个用户一个是 Yby6 一个是 Yangbuyi 密码为 1234

登录和退出

如上图的步骤分别为如下所解释的:

  • 构建 SecurityManager 工厂
  • 在通过工厂创建 SecurityManager
  • 在将 SecurityManager 设置到运行环境中
  • 在创建一个 Subject 实例
  • 在创建 Token 令牌
  • 用户登录
  • 用户退出

最终代码如下所示:

代码语言:java
复制
/**
 * @author yby6
 */
public class Demo {

    public static void main(String[] args) {
        IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");

        SecurityManager securityManager = factory.getInstance();

        SecurityUtils.setSecurityManager(securityManager);

        Subject subject = SecurityUtils.getSubject();

        UsernamePasswordToken token = new UsernamePasswordToken("yby6", "1234");

        try {
            subject.login(token);
        } catch (UnknownAccountException e) {
            System.out.println("用户名不存在");
            e.printStackTrace();
        } catch (IncorrectCredentialsException e) {
            System.out.println("密码错误");
            e.printStackTrace();
        }

        System.out.println("是否认证" + subject.isAuthenticated());

        subject.logout();

        System.out.println("是否认证" + subject.isAuthenticated());
    }
}

认证流程图

认证代码执行流程

  1. 调用 subject.login 方法进行登录,其会自动委托给 securityManager.login 方法进行登录。
  1. securityManager 通过 Authenticator(认证器)进行认证。
  1. Authenticator 的实现 ModularRealmAuthenticator 调用 Realm 从 ini 配置文件中取用户真实的账号和密码。
  1. IniRealm 先根据 token 中的账号去 ini 中找该账号,如果找不到则给 ModularRealmAuthenticator 返回 null,如果找到则匹配密码,匹配密码成功则认证通过。
  1. 最后调用 Subject.logout 进行退出操作。

最后

本期结束咱们下次再见👋~

🌊 关注我不迷路,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎在评论区留言,我一般看到都会回复的。大家点赞支持一下哟~ 💗

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是认证
  • 关键对象
  • 使用 ini 完成认证
  • 登录和退出
  • 认证流程图
  • 认证代码执行流程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档