有关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.给安全管理器设置realmsecurityManager.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");

再次运行,发现出现了无效的凭证,所谓的凭证就是密码,也就是密码不对

shiro之第一个程序认证相关推荐

  1. rails再体验(第一个程序)

    掌握redmine plugin开发的目标在2016年未实现,2017年继续. 选择<Ruby on Rails Tutorial>教程,windows安装railsinstaller,该 ...

  2. 【历史上的今天】12 月 10 日:世界上第一位程序员诞生;Ada 语言发布;第一人称射击游戏的开拓者

    整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来. 今天是 2021 年 12 月 10 日,在 120 年前的今天,瑞典国王和挪威诺贝尔基金会首次颁发了诺贝尔奖.根据诺贝尔 ...

  3. Spring Boot 整合 shiro 之盐值加密认证详解(六)

    Spring Boot 整合 shiro 之盐值加密认证详解 概述 不加盐认证 加入密码认证核心代码 修改 CustomRealm 新增获取密文的方法 修改 doGetAuthenticationIn ...

  4. Windows Phone的应用程序认证要求

    WindowsPhone的应用程序认证要求 本文介绍了 WindowsPhone 应用程序或游戏要通过认证并在 WindowsPhone Marketplace 中发布而必须满足的策略和技术要求. 1 ...

  5. 0基础学python第一天:认识python,安装python,输出第一个程序

    目录 目录 目录 一(了解)Python简介: 二.发展历程: 三.Python 特点: 四.Python语言主要应用领域: 1:人工智能 2:云计算 3:Web开发 4:爬虫技术 5:网络游戏开发 ...

  6. 零起点学算法01——第一个程序Hello World!

    零起点学算法01--第一个程序Hello World! Description 题目很简单 输出"Hello World!"(不含引号),并换行. Input 没有输入 Outpu ...

  7. 她,诗人拜伦之女,英国数学家,历史上第一位程序员

    作者丨吴军 来源丨大数据文摘 摘自丨<信息论> 人类使用机械处理信息的尝试是由两个看似不该有交集的英国人开启的. 在英格兰中部莱斯特郡的柯比-马洛里庄园,住着一对母女. 1816年初那个多 ...

  8. python定义一个变量_Python新手上车3:Python第一个程序和变量

    第一个程序 上节内容我们提到了如何安装Python 以及安装配置VSCode,这节内容我们继续介绍第一个程序的建立: 1.在VS的左上角点击建立一个新的程序,命名为 python_0301_code. ...

  9. 第一个程序01 - 零基础入门学习汇编语言20

    第四章:第一个程序01 让编程改变世界 Change the world by program 引言 现在我们将开始编写完整的汇编语言程序,用编译器将它们编译成为可执行文件(如:*.exe文件),在操 ...

最新文章

  1. MM32F3277 MicroPython 实验板设计和软件测试
  2. java 反射机制--根据属性名获取属性值
  3. 清华大学医学院张明君团队招聘脑机接口与微纳医学交叉领域博士后
  4. sybase存储过程修改
  5. linux shell 删除两个文件相同部分
  6. Linux下的权限掩码umask
  7. Python与Golang协程异同
  8. html的模板引入,rel=import 未来的HTML模板引入方式
  9. (135)FPGA面试题-介绍FPGA的速度等级与温度等级
  10. 最新破解无线网络破解教程,一键破解wpa/wpa2密码软件下载。破解不用抓包不用跑字典。快速破解wpa/wpa2密码...
  11. TIdTCPClient
  12. python、变量命名中字母不区分大小写_python变量名不区分大小写吗
  13. 我深爱的Java,对不起,我出轨了!!!呸!渣男!
  14. Cesium环境 Primitives加载广告牌出现Cannot read property ‘globe‘ of undefined
  15. discuz!Q免登陆蓝天采集器api发布模块
  16. 一个简单的安居客房屋信息爬虫
  17. 学校教材订购系统课程设计
  18. SpringCloud之利用FTL生成Word报表并下载
  19. PySerial学习系列1--serial.tools
  20. Unable to negotiate with x.x.x.x port 22: no matching key exchange method found. Their offer: diffie

热门文章

  1. Redis学习笔记1-安装配置
  2. WPF中实现验证码功能
  3. ALinq 入门学习(八)--ALinq 对Vs2010 的支持
  4. esjava 同步mysql_Elasticsearch和mysql数据同步(elasticsearch-jdbc)
  5. mac上php环境_在Mac系统下配置PHP运行环境
  6. matlab图像相加例子,MATLAB图像处理例子
  7. php 正则 菜鸟,PHP正则表达式基础入门
  8. 10 windows 启动虚拟机报错_Windows 系统如何安装 Docker
  9. 用计算机图形学画字母,r 语言快速出图——单因素方差带字母显著性标记
  10. viso怎么控制连接线_德国菲斯曼故障出现这些字母代码怎么解决?