有关shiro的介绍请访问https://blog.csdn.net/Kevinnsm/article/details/111823268

在这里插入图片描述
三个核心组件:Subject, SecurityManager 和 Realms.
Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。

SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。

Realm: Realm充当了Shiro与应用安全数据间的“桥梁”或者“连接器”。也就是说,当对用户执行认证(登录)和授权(访问控制)验证时,Shiro会从应用配置的Realm中查找用户及其权限信息。

从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。
Shiro内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC)、类似INI的文本配置资源以及属性文件等。如果系统默认的Realm不能满足需求,你还可以插入代表自定义数据源的自己的Realm实现。


下面模拟shiro的认证

1.导入shiro-core的坐标

<dependency>
      <groupId>org.apache.shiro</groupId>
      <artifactId>shiro-core</artifactId>
      <version>1.7.0</version>
    </dependency>

2.在resouces资源目录下,创建shiro.ini文件,用来保存账户和密码,模拟数据库

[users]
tom=123
jone=456
jane=789

3.模拟认证

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.mgt.DefaultSecurityManager;
import org.apache.shiro.realm.text.IniRealm;
import org.apache.shiro.subject.Subject;

/**
 * @author:抱着鱼睡觉的喵喵
 * @date:2020/12/27
 * @description:
 */
public class TestAuthenticator {
    public static void main(String[] args) {
        //1.创建security manager安全管理器对象
        DefaultSecurityManager securityManager=new DefaultSecurityManager();
       //2.给安全管理器设置realm
        securityManager.setRealm(new IniRealm("classpath:shiro.ini"));
        //3.SecurityUtils 给全局安全工具类设置安全管理器
        SecurityUtils.setSecurityManager(securityManager);
        //4.关键对象 subject主体
        Subject subject = SecurityUtils.getSubject();
        //5.创建令牌,相当于用户登录时输入的账户和密码(
        UsernamePasswordToken token = new UsernamePasswordToken("tom","123");

        try {
            System.out.println("认证状态:"+subject.isAuthenticated());
            subject.login(token);//用户认证
            System.out.println("已认证");
            System.out.println("认证状态:"+subject.isAuthenticated());
        }catch (Exception e){
            e.printStackTrace();
        }

    }
}

运行结果:
在这里插入图片描述
当我把令牌的账户改成配置文件shiro.ini不存在的账户,密码不变

 UsernamePasswordToken token = new UsernamePasswordToken("zsh","123");

再次运行出现以下情况,未知的账户异常,表明账户不存在
在这里插入图片描述

当我把密码改错,账户不变时

 UsernamePasswordToken token = new UsernamePasswordToken("tom","123456");

再次运行,发现出现了无效的凭证,所谓的凭证就是密码,也就是密码不对
在这里插入图片描述

posted on 2020-12-27 20:17  凸凸大军的一员  阅读(47)  评论(0编辑  收藏  举报