Shiro总结面试问题

article/2025/10/7 17:10:52

Shiro总结

Shiro可做哪些事:

认证、授权、加密、会话管理、与web集成、缓存等

最简单的Shiro应用是怎样运行的:

应用代码通过Subject来进行认证和授权,而Subject又委托给SecurityManager
我们需要给Shiro的SecurityManager注入Realm,从而让SecurityManager能得到合法的用户及其权限进行判断。

简单Shiro应用运行流程
Apache Shiro的三大核心组件:

  1. Subject:当前用户的操作(所有的Subject实例都被绑定到一个SecurityManager上)
  2. SecurityManager:用于管理所有的Subject(Shiro架构的心脏,用来协调内部各安全组件,管理内部组件实例,并通过它来提供安全管理的各种服务)
  3. Realms:用于进行权限信息的验证(本质上是一个特定的DAO,必须指定至少一个Realm用来进行身份验证和授权 )

Authentication和Authorization:
在Shiro的用户权限认证过程中其通过两个方法来实现:

  1. Authentication:是验证用户身份的过程
  2. Authorization:是授权访问控制,用于对用户进行的操作进行认证授权,证明该用户是否允许进行当前操作,如访问某个链接,某个资源文件等。

其他组件:
除了上述几个组件外:Shiro还有几个组件:

  1. SessionManager:Shiro为任何应用提供了一个会话编程范式。
  2. CacheManager:对Shiro的其他组件提供缓存支持。

Shiro的优点:

  1. 简单你的身份认证,支持多种数据源
  2. 非常简单的加密API
  3. 对角色的简单的授权,支持细粒度的授权(方法级)
  4. 支持一级缓存,以提升应用程序的性能
  5. 内置的基于POJO企业会话管理,适用于Web以及非Web的环境
  6. 不跟任何的框架或者容器捆绑,可以独立运行

比较Spring Security和Apache Shiro:

  1. 相比Spring Security,Shiro在保持强大功能的同时,使用简单性和灵活性
  2. Spring Security:即便是一个一个简单的请求,最少得经过它的8个Filter
  3. Spring Security必须在Spring的环境下使用
  4. 初学Spring Security,曲线还是较大,需要深入学习其源码呵呵框架,配置起来也较费力

Shiro如何自实现认证:

Shiro的认证过程由Realm执行,SecurityManager会调用Realm包下的getAuthenticationInfo(AuthenticationToken token)方法。
实际开发中,通常提供org.apache.shiro.realm.AuthenticatingRealm 的实现类,并在该实现类中提供doGetAuthenticationInfo(AuthenticationToken token)方法的具体实现。

Shiro如何实现自实现授权:

实际开发中,通常提供org.apache.shiro.realm.AuthenticatingRealm 的实现类,并提供doGetAuthorizationInfo(PrincipalCollection principals)方法的具体实现。

配置ShiroConfig

  1. 创建一个方法并给注解@Bean将其交给Spring进行管理,返回类型为ShiroFilterFactoryBean类型 参数为SecurityManager securityManager
  2. 在方法中new ShiroFilterFactoryBean(),运用setSecurityManager()把securityManager传进去进行设置
  3. 运用setLoginUrl让用户在访问某个接口需要登录时跳转页面,运用setUnauthorizedUrl让用户登录后没有权限时跳转页面
  4. new LinkedHashMap<>();把相关路径所需的权限进行设置,之后把其交给setFilterChainDefinitionMap()中。
  5. 创建一个方法并给注解@Bean将其交给Spring进行管理,返回类型为SecurityManager类型的securityManager()方法,new DefaultWebSecurityManager();
  6. 因其securityManager可以管理各种组件,所以可以绑定各种自定义的组件,设置绑定realm推荐放到最后,不然某些情况下不生效。

Shiro有哪些组件:

  1. Authentication:身份认证/登录,验证用户是不是拥有相应的身份。
  2. Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限
  3. Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;
  4. Crypotgraphy:加密,保护数据的安全行,如密码加密存储到数据库,而不是明文存储;
  5. Web Support:Web支持,可以非常容易的集成到Web环境。
  6. Remember me:记住我,这是一个非常常见的功能,即一次登录后,下次再来的话不用登录了。

http://chatgpt.dhexx.cn/article/cmFa9woy.shtml

相关文章

python中socket进行多线程,利用 Socket怎么在Python项目中实现一个多线程并发功能...

利用 Socket怎么在Python项目中实现一个多线程并发功能 发布时间:2020-12-11 13:55:06 来源:亿速云 阅读:95 作者:Leah 这篇文章给大家介绍利用 Socket怎么在Python项目中实现一个多线程并发功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 1.S…

Jmeter多线程并发和压测结果分析

一、多线程并发 1. 线程组简介: (1). 线程数: 配置虚拟用户数量 (2). Ramp-Up时间:设置的虚拟用户数需要多长时间全部启动,如果线程数为10,准备时长为2,那么需要2秒钟启动10个线程,也就是每秒钟启动5个线程。 (3). 循环次数 (4). 调度器-持续时间(秒),压测多长时间…

面试必问!多线程并发问题

多线程并发问题&#xff0c;基本是面试必问的。 大部分同学应该都知道Synchronized&#xff0c;Lock&#xff0c;部分同学能说到volatile、并发包&#xff0c;优秀的同学则能在前面的基础上&#xff0c;说出Synchronized、volatile的原理&#xff0c;以及并发包中常用的数据结…

实际场景中的多线程并发编程案例

目录 使用多线程的意义&#xff1a; CountDownLatch 案例一&#xff1a;多线程同步发起并发请求 案例二&#xff1a;rocketmq内&#xff0c;每个broker将自己注册到所有的nameserver时 案例三&#xff1a;利用异步线程实现同步请求 CompletableFuture 应用一&#xff1a…

【已解决】利用 Java 多线程并发编程提高数据处理效率

&#x1f389;工作场景中遇到这样一个需求&#xff1a;根据主机的 IP 地址联动更新其他模型的相关信息。需求很简单&#xff0c;只涉及一般的数据库联动查询以及更新操作&#xff0c;然而在编码实现过程中发现&#xff0c;由于主机的数量很多&#xff0c;导致循环遍历查询、更新…

c++ 多线程并发

基于C11的线程池(threadpool),简洁且可以带任意多的参数 - _Ong - 博客园 C11多线程编程(六)——线程池的实现 1. ① thread #include <iostream> #include <thread>class A { public:void operator()() {std::cout << "11111\n";} };int main…

python多线程并发请求

再api测试时&#xff0c;避免不了高并发的测试情况。所以以下案例为线程并发请求代码&#xff0c;以请求百度为例 #!/usr/bin/env python #!coding:utf-8 from __future__ import division from threading import Thread import requests import matplotlib.pyplot as plt imp…

多线程并发的一些解决思路

一、利用不变性解决并发问题 不变性&#xff08;Immutability&#xff09;模式。所谓不变性&#xff0c;简单来讲&#xff0c;就是对象一旦被创建之后&#xff0c;状态就不再发生变化。换句话说&#xff0c;就是变量一旦被赋值&#xff0c;就不允许修改了&#xff08;没有写操…

python之多线程并发

前言 今天呢笔者想和大家来聊聊python多线程的并发&#xff0c;废话就不多说了咱们直接进入主题哟。 一、线程执行 python的内置模块提供了两个内置模块&#xff1a;thread和threading&#xff0c;thread是源生模块&#xff0c;threading是扩展模块&#xff0c;在thread的基础…

python多线程并发测试

python多线程 文章目录 python多线程一、并发与并行&#xff1f;二、同步与异步的概念&#xff1f;三、线程与进程的区别&#xff1f;需求1&#xff1a;多线程执行不同任务&#xff1a;需求2&#xff1a;多线程执行相同任务&#xff1a;1.threading并发性2.多线程并发---资源共…

JAVA多线程并发

JAVA并发知识库 JAVA线程实现/创建方式 1.继承Thread类 Thread类本质上时实现了Runnable接口的一个实例&#xff0c;代表一个现成的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法&#xff0c;它将启动一个新线程&#xff0c;并执…

多线程 与并发

官方文档 https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html 推荐《Java高并发编程详解&#xff1a;多线程与架构设计》 推荐《Java高并发编程详解&#xff1a;深入理解并发核心库》 有很多工具的基准测试 同步和异步 所谓同步就是一个任务的完成需…

多线程和并发问题详解

文章目录 一、进程与线程二、并发与并行1、线程安全问题&#xff1a;2、共享内存不可见性问题 三、创建线程四、Thread类详解五、其他方法六、实例 一、进程与线程 进程&#xff1a;是代码在数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位。 线程&…

面试官:多线程问题你一问三不知,还要我怎么“放水”?

面试官:问你几个多线程相关的问题吧,说一下导致线程死锁的原因,怎么解除线程死锁? 程序员阿里:这个...死锁... (一分钟后) 面试官:不知道?那好,说一下Lock 和 Synchronized 的区别? 程序员阿里:Lock是锁... 面试官:...会就会,不会就说不会,节省一下时间,s…

多线程(并发执行)

一、概念区分 1、并行与并发 并行 ​ 当系统有一个以上CPU时&#xff0c;同一时刻&#xff0c;当一个CPU在执行一个任务时&#xff0c;另一个CPU在执行另一个任务&#xff0c;两个任务互不抢占CPU资源&#xff0c;可以同时进行&#xff08;多核CPU&#xff0c;一个CPU执行一…

2.多线程并发

1.说说你知道的创建线程的方式 1、继承Thread类&#xff0c;重写run方法。2、实现Runnable接口&#xff0c;重写run方法。3、实现Callable接口&#xff0c;重写call方法。4、通过线程池创建线程。 https://blog.csdn.net/u013541140/article/details/95225769 CachedThreadPoo…

C++多线程并发(一)--- 线程创建与管理

文章目录 前言一、何为并发1.1 并发与并行1.2 硬件并发与任务切换1.3 多线程并发与多进程并发 二、如何使用并发2.1 为什么使用并发2.2 在C中使用并发和多线程 三、C线程创建3.1 C11新标准多线程支持库3.2 线程创建的简单示例 更多文章&#xff1a; 前言 我们都听说过摩尔定律…

lrzsz

lrzsz是一款程序&#xff0c;在linux中可以代替ftp的上传和下载 安装lrzsz yum install -y lrzsz上传&#xff1a;rz 将文件上传到本地&#xff0c;默认上传到当前目录 该程序支持拖拽上传&#xff0c;如下图所示 上传成功后查看本地 下载&#xff1a;sz filename 例如&am…

linux之lrzsz

1、lrzsz介绍 我们利用lrzsz进行windows和linux间的文件上传下载 2、安装 在ubuntu系统下 sudo apt-get install lrzsz 在centos系统下 yum install lrzsz 3、使用 1)、windows上传文件到linux环境,使用如下命令 rz

文件传输工具rzsz

mac安装rz sz? 之前在item2上使用使用rz和sz时就直接夯住 发现是需要配置下 mac使用rz&#xff0c;sz进行文件传输(默认使用的终端为iterm2) 一、安装lrzsz brew install lrzsz 二、下载iterm2-zmodem 执行 git clone https://github.com/aikuyun/iterm2-zmodem.git cd …