首页 > 其他分享 >第一节 身份认证的基本流程

第一节 身份认证的基本流程

时间:2022-10-07 19:00:59浏览次数:58  
标签:用户 SecurityManager 数据源 流程 第一节 认证 token shiro Subject


前言

        先感谢涛哥写了这么好的文章​

        学习完孤傲苍狼和涛哥的博客,觉得分享知识是一种进步,原因很简单:能把别人教会了的博客,一定是好博客。我始终相信,写博客的受益者之一永远都有自己。

        因为自己水平有限,推荐看完涛哥的博客后,再来看看我写的总结,对于博主来说,就已经心满意足了。本系列已经默认你有一定的Java基础。如果您有任何疑问或者建议,欢迎在文章下面进行评论。我期待与大家一起交流学习、共同进步。

       ​

一、基本流程

第一节 身份认证的基本流程_数据

        Subject:主体,用来与用户交互的对象。它其实是一个门面对象,专门用于管理来自客户端的数据。比如客户端传来了一批帐号密码数据,它需要将这批数据传入Shiro的内部核心SecurityManager中,以验证帐号密码是否正确。再比如,判断当前用户是否有相关的角色,Subject会去问问内部的SecurityManager,这个人是“小学生角色”吗?

        你懂的理解就是:Subject就是一个拉客滴,它知道本会所提供的所有服务。来了一批客人,它需要将客人引进到SecurityManager中进行服务,所以说SecurityManager是shiro底层的核心

        SecurityManager:安全中心,它相当于“用户信息”与“数据源”的中间者。用户信息指用户在WEB页面上输入的数据,通常指 用户名、邮箱、密码、手机号等。 “数据源”指数据库中存放的数据。    SecurityManager的作用就是把“用户信息”拿去与“数据源”比对,看“用户信息”是不是存在于“数据源”中。

        Realm:数据源。Shiro从数据库中查询一些数据,保存在Realm这种对象中。Shiro会把从Subject中获取的数据与Realm的数据进行对比,从而确定客户端传来的帐号密码是否正确。

        流程如下:

        步骤一:Shiro把用户的数据封装成标识token,token一般封装着用户名,密码等信息。

        步骤二:使用Subject门面获取到封装着用户的数据的标识token

        步骤三:Subject把标识token交给SecurityManager,在SecurityManager安全中心中,SecurityManager把标识token委托给认证器Authenticator进行身份验证。认证器的作用一般是用来指定如何验证,它规定本次认证用到哪些Realm。

        步骤四:认证器Authenticator将传入的标识token,与数据源Realm对比,验证token是否合法。

        从代码的层面来理解:  Subject对象其实是一个门面类,它能够执行非常多的操作,例如认证授权用户退出。但是它实际上将这些操作委托给内部的SecurityManager去做。简单点说,Subject的底层实现就是SecurityManager。

        public class Subject ...

                   private SecurityManager  securityManager;

                   public  void  我们有按摩服务() {  securityManager. 按摩() ; }

二、验证代码

        首先导入shiro的依赖。

<dependencies>  
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>

        编写Junit测试用例 

public class MyFirstTest {
@Test
public void test1() {
//读取配置文件,相当于在加载数据源
Factory<org.apache.shiro.mgt.SecurityManager> factory =
new IniSecurityManagerFactory("classpath:shiro_1.ini");
//SecurityManager 是Shiro内部的底层实现,几乎所有功能都由其实现
org.apache.shiro.mgt.SecurityManager sm = factory.getInstance();
//SecurityUtils是一个工具,方便用户调用,它封装了SecurityManager
SecurityUtils.setSecurityManager(sm);
//生成一个SecurityManager的门面类,即Subject。
Subject subject = SecurityUtils.getSubject();
//封装用户的数据
UsernamePasswordToken token = new UsernamePasswordToken("jay", "123");
//Subject接收到的方法参数,最终将会传到SecurityManager中进行验证
//将用户的数据token 最终传递到Realm中进行对比
subject.login(token);
//判断本帐号是否已经被认证
Assert.assertEquals(true, subject.isAuthenticated());
}
}

        仅仅寥寥几行代码就能展现出大佬的代码风范。首先使用工厂设计模式,通过一个工厂返回一个SecurityManager实例。再者,Subject对象负责与用户交互,接收客户端数据,将数据封装好后委托给内部的SecurityManager对象,上述步骤则是门面设计模式的体现,Subject是门面,SecurityManager是底层核心。

        最后编写我们的shiro配置文件  shiro_1.ini。

        shiro_1.ini配置文件内容如下,它就是数据源Realm。

[users]
jay=123


标签:用户,SecurityManager,数据源,流程,第一节,认证,token,shiro,Subject
From: https://blog.51cto.com/u_15713464/5734888

相关文章

  • 用 NodeJS 开发一版在线流程图网站
    源码:github.com/maqi1520/Cl…背景对于程序员来说,每天除了写代码,接触较多的可能是各种图表了,诸如流程图、原型图、拓扑图、UML图以及思维导图等等,我们较为熟悉的是Process......
  • 分布式存储系统之Ceph集群CephX认证和授权
    前文我们了解了Ceph集群存储池操作相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/16743611.html;今天我们来聊一聊在ceph上认证和授权的相关话题;我们......
  • JDK安装及环境变量配置--流程
    jdk安装与配置环境变量1、下载jdkJDK1.8官网链接地址https://www.oracle.com/java/t...点击下载,下载完后安装,直接点击下一步。可更改你要安装的位置(要记住这个位置,后面环......
  • CentOS下nginx的安装流程
     1基础配置系统:CentOSLinuxrelease7.9.2009(Core)NginX版本:nginx-1.20.1查看操作系统名称:cat/etc/centos-release查看相关系统信息:uname-auname--help可以查看具......
  • 122-26-ZooKeeper 读写流程和监听机制_ev
                           ......
  • 每周总结——week02(流程控制篇)
    每周总结——week02(流程控制篇)1、流程控制理论什么是流程控制对程序执行的顺序进行控制总共有三种:1、顺序结构 按程序语句的自然顺序,自上到下,依次执行每条语句的程......
  • 120-24-ZooKeeper 状态同步全流程源码分析_ev
                         ......
  • 玩转华为ENSP模拟器系列 | 两个网关之间通过IKE方式协商IPSec VPN隧道(采用预共享密钥
    素材来源:华为防火墙配置指南一边学习一边整理试验笔记,并与大家分享,侵权即删,谢谢支持!附上汇总贴:​​玩转华为ENSP模拟器系列|合集_COCOgsta的博客-CSDN博客_华为模拟器实验......
  • Android类加载流程
    背景由于前前前阵子写了个壳,得去了解类的加载流程,当时记了一些潦草的笔记。这几天把这些东西简单梳理了一下,本文分析的代码基于Android8.1.0源码。流程分析从loadClass......
  • HDFS读写流程
    HDFS读流程客户端通过FileSystem的get方法加载配置获得FileSystem对象。FileSystem向NameNode通过open方法请求读取文件。NameNode进行检查(文件是否存在,是否有相应权......