2021年你还不会Shiro?----1.Shiro的架构

简介: 涉及到多用户登录的系统时都要对用户进行权限管理,权限管理属于系统安全的范畴,权限管理主要是为了实现“对用户访问系统的控制”,根据安全规则去控制用户可以访问的资源。

一.什么权限管理



涉及到多用户登录的系统时都要对用户进行权限管理,权限管理属于系统安全的范畴,权限管理主要是为了实现“对用户访问系统的控制”,根据安全规则去控制用户可以访问的资源。


而权限管理又包括两部分“身份认证”和“授权”,简称认证授权,权限管理的过程就是认证授权的过程。用户在访问系统时先对用户的身份进行认证,在认证通过以后根据该用户的权限,然后确定该用户可以访问的资源。


1.什么是身份认证?


身份认证就是判定当前用户是否是一个合法用户的过程,如果是则身份认证通过,否则身份认证失败,最常用的身份认证方式就是我们使用用户名和密码登录,身份认证去查询当前登录的用户名于密码是否正确,其他的还有指纹登录的身份认证,刷卡形式的身份认证。


2.什么是授权?


授权说的是授权访问,对当前用户授予访问的权限,只有拥有的访问的权限我们才能进入到想要浏览的或者说是该用户可以浏览的资源。


1.3举例子说明


形象的说明身份认证与授权的案例,我么可以举这个例子,比如我们上班,在进入大门时,物业需要对你的身份进行辨别,这就是个身份认证的过程,而进入公司后公司可能还有门禁,不同的楼层不同的办公局域,你只拥有了部分进入的权限,因为你这个角色只被授权了部分区域。


二.什么是Shiro?



Shiro是一个功能强大且易于使用的安全框架,使用它可以轻松实现身份验证法、授权、加密、会话管理等功能。


1.Shiro的核心架构


20210313104852565.png



从上图中我们可以看出Shiro最核心的部分就是Security Manager了,我们叫他安全管理器,安全管理器管理哪些内容呢,就是中间那个大方框中的东西了了,有Authenticatior、Authorizer、Session Manager、Session DAO、Cache Manager、PluggableRealms了,这些认不认的东西都要归我们的Security Manager来管理,所以我们使用Shiro最先需要做的事情就是来获取安全管理器,然后才能操作这里面的身份认证、授权、会话管理、缓存管理、域的管理这些。下面我们来一个个认识下这些归于Security Manager管理的东西。


1.Subject /ˈsʌbdʒɪkt/


Subject主题,外部应用于Subject进行交互,Subject负责记录用户的信息,我们也可以将Subject看成一个携带有用户信息的对象,Subject是Shiro中的一个接口,该接口里面定义了很多身份认证与授授权的方法,外部程序或者用户通过Subject进行认证,而Subject就要通过Serurity Manager来进行认证授 权。


2.Security Manager /sɪˈkjʊərəti/


Security Manager安全管理器,他是Shiro的核心,负责对所有的Subject进行身份认证、授权等的实现,实际上Security Manager是通过Authenticatior来实现身份认证,通过Authorizer来实现授权,通过Session Manager来实现会话管理这些功能。


3.Authenticator /ɔːˌθentɪˈkeɪtə/


Authenticator认证器,在实际使用中,不同的场景我们需要对进行的身份认证场景会有差别,所以Shiro把Authenticator设计成了接口,我们可以根据不同的场景做不同的身份认证,但同时Shiro也提供了一个现成的Authenticator的实现类ModularRealmAuthenticator,该类可以满足我们开发中大部分场景的身份验证。


4.Authorizer /ˈɔːθəraɪzə/


Authorizer授权器,用户在通过了Authenticator认证器认证过以后,还需要Authorizer授权器对用户进行授权,方可访问到对应的资源。


5.Realm /relm/


Realm领域,从上面的图中我们可以看出无论是Authenticator认证器,还是Authorizer授权器都是在Realm领域的上方,因为身份认证与授权是需要依赖Realm领域来完成的,身份认需要从Reaml领域中获取用户信息用以和Subject中的用户信息进行比对,授权时要根据当前用户从Realm领域中查找当前用户的权限范围。所以说我们可以将Realm看成一个数据源,这里是数据的来源。那Realm中的数据是哪里来的呢,Realm的数据可以从配置文件中读取,也可以去数据库中查询,一般都会将信息放在数据库中。


6.Session Manager


Session Manager会话管理,Shiro框架自定义了一套会话管理,它不依赖web容器的session,所以即使在非web环境我们依然可以使用Shiro的Session,而且利用Shiro的Session我们可以很容易的实现单点登录,比如登录以后将用户登录成功的信息放入到Session,然后将该信息放入redis中,用户访问其他服务时,就可以直接从redis中验证该用户是否已经登录,从而实现单点登录功能。


7.Session DAO


会话操作DAO,该模块是负责对session信息的增删改查,我们不可能将信息放入到session中以后就不在问了,在用户退出当前登录时或者长久未登录时我们都需要处理当前用户的session信息,Session DAO就是来操作session信息的,我们可以选择把session信息存入到数据库中,不使用时将其删除。


8.Cache Manager


缓存管理,Shiro拥有自己的缓存管理,用以存储用户的缓存信息,这样就不想要每次对用户进行授权时都去数据库中或者配置文件中查找对应用户的权限信息,利用缓存管理来缓存权限信息可以提高用户的服务的响应速度。


9.Cryptography /krɪpˈtɑːɡrəfi/


加密,这里提供了一系列的加密解密方法,因为我们无论将密码是存入到文件中还是数据库中都不可能进行明文存储,都需要对信息进行加密,此外还有一些用户敏感信息,防止泄露都需要进行加密处理。


到这里就已经将Shiro的所有功能点介绍完毕,Shiro被称为安全、简单易用的权限框架。我们可以看出他的核心的东西并不多,就是Security Manager中的Authenticator与Authorizer两部分,其他的都是为这两者服务的,或者更准确的说都是辅助功能,所以掌握这部分才是重点中的重点。


三.总结



Shiro是一款轻便易用的权限框架,该框架的架构并没有多么复杂,而且易于上手,和Spring Security一样都是主流的安全框架,也是日常开发必不可少的技能,这篇文章里主要是介绍了该框架的架构,以及一些转有名词,后续会持续更新该框架的文章。


相关文章
|
7月前
|
存储 缓存 安全
02 Shiro的架构
02 Shiro的架构
29 0
|
缓存 安全 前端开发
shiro架构的入门介绍
shiro是apache的一个开源框架,是一个权限管理的框架,实现 用户认证、用户授权。 spring中有spring security (原名Acegi),是一个权限框架,它和spring依赖过于紧密,没有shiro使用简单。 shiro不依赖于spring,shiro不仅可以实现 web应用的权限管理,还可以实现c/s系统, 分布式系统权限管理,shiro属于轻量框架,越来越多企业项目开始使用shiro。
shiro架构的入门介绍
|
存储 缓存 安全
Shiro框架01之什么是shiro+shiro的架构+权限认证
Shiro框架01之什么是shiro+shiro的架构+权限认证
Shiro框架01之什么是shiro+shiro的架构+权限认证
|
存储 缓存 安全
非常详尽的 Shiro 架构解析
Apache Shiro是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。
非常详尽的 Shiro 架构解析
|
安全 Java API
shiro实战系列(三)之架构
Apache Shiro 的设计目标是通过直观和易于使用来简化应用程序安全。Shiro 的核心设计体现了大多数人们是如何考虑应用程序安全的——在某些人(或某些事)与应用程序交互的背景下。   应用软件通常是基于用户背景情况设计的。
1376 0
|
安全 Apache
shiro(2)-架构与配置
认证就是用户确认身份的过程,确认登录的用户身份能够操作的内容。 使用shiro认证分为以下几个步骤: 1,得到主体的认证和凭据。 // let's login the current user so we can check against roles and permissions: if (!currentUser.
985 0
|
数据库 数据安全/隐私保护 Spring
shiro架构
1 shiro介绍  1.1 什么是shiro 分享牛系列,分享牛专栏,分享牛。shiro是apache旗下一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。
1559 0
|
18小时前
|
JavaScript Java 持续交付
构建高效微服务架构:后端开发的新范式
【5月更文挑战第3天】 在现代软件开发的浪潮中,微服务架构以其灵活性、可扩展性和技术多样性而受到重视。本文深入探讨了如何构建一个高效的微服务系统,包括关键的设计原则、技术选型、以及实现细节。我们将通过分析微服务的核心概念,提供一套实用的步骤和最佳实践,以指导开发者构建出既健壮又易于维护的分布式系统。文章将重点讨论如何在保证系统性能和稳定性的前提下,实现服务的解耦与独立部署,从而推动后端开发工作流的优化和创新。
|
18小时前
|
安全 数据管理 持续交付
构建高效微服务架构的五大核心策略
【5月更文挑战第3天】在当前软件开发领域,微服务架构已成为一种流行的设计模式,它通过将应用程序拆分成一组小型、松耦合的服务来提高系统的可维护性和扩展性。本文将详细探讨构建高效微服务架构的五大核心策略,包括服务划分原则、通信机制设计、数据管理、安全性考虑以及持续集成与部署。这些策略不仅有助于确保系统的高可用性和灵活性,同时也支持快速迭代和部署,是实现现代云原生应用的基石。