代码编织梦想

下面详细介绍在进行授权时,Shiro的内部处理机制。

如上图,我们通过Shiro架构图的授权部分,来说明Shiro授权内部的处理顺序:

1. 应用程序或框架代码调用任何Subject 的hasRole*, checkRole*, isPermitted*, 或者checkPermission*方法的变体,传递任何所需的权限或角色内容。

2. Subject 的实例,通常是DelegatingSubject (或子类)代表应用程序的SecurityManager 通过调用securityManager的各自相同的hasRole*, checkRole*, isPermitted*,或checkPermission*方法的变体(SecurityManager 实现org.apache.shiro.authz.Authorizer 接口,他定义了所有Subject 具体的授权方法)。

3. SecurityManager,作为一个基本的“保护伞”组件,接替/代表它内部的org.apache.shiro.authz.Authorizer实例通过调用authorizer 各自的hasRole*, checkRole*, isPermitted*, 或者checkPermissions*方法。默认情况下,authorizer 实例是一个ModularRealmAuthorizer 实例,它支持协调任何授权操作过程中的一个或多个Realm 实例。

4. 每个配置好的Realm 被检查是否实现了相同的Authorizer 接口。如果是,Realm 各自的hasRole*, checkRole*,isPermitted*,或checkPermission*方法将被调用。

如前所述,Shiro SecurityManager 的默认实现是使用一个ModularRealmAuthorizer 实例。ModularRealmAuthorizer 同样支持单一的Realm,以及多个Realm 的应用。

对于任何授权操作,ModularRealmAuthorizer 将遍历其内部的Realm 集合,并按顺序与每一个进行交互。每个Realm 的交互功能如下:如果Realm 自己实现了Authorizer 接口,它的各个Authorizer 方法(hasRole*, checkRole*, isPermitted*, 或checkPermission*)将被调用;如果Realm 不实现Authorizer 接口,它会被忽略。

当存在多个Realms时,ModularRealmAuthorizer 根据SecurityManager 的配置获得对Realm 实例的访问。当执行授权操作时,它会遍历该集合,同时对于每一个自己实现Authorizer 接口的Realm,调用Realm 各自的Authorizer 方法(如hasRole*, checkRole*,isPermitted*,或checkPermission*)。

如果Realm 的方法导致异常,该异常将会以AuthorizationException 的形式传递给调用者。同时任何剩余的Realm 将不会被该授权操作所访问。如果该Realm 的方法是一个返回布尔值的hasRole*或者isPermitted*的变体,并且该返回值为true,真值将会立即被返回,同时任何剩余的Realm 都将不会访问。这种处理是作为提高性能的一种行为。

当执行基于字符串的权限检查时, Shiro默认实现是将该字符串转换成一个实际的Permission 实例。所有Shiro Realm 的默认实现是内部的WildcardPermissionResolver,它采用Shiro 的WildcardPermission 字符串格式。你也可以创建自己的PermissionResolver 的实现,支持自己的权限字符串语法。可以将你的PermissionResolver 设置为全局的。例如:

globalPermissionResolver = com.foo.bar.authz.MyPermissionResolver

securityManager.authorizer.permissionResolver = $ globalPermissionResolver

...

也可以为特定的Realm设置自己创建的PermissionResolver。例如:

permissionResolver = com.foo.bar.authz.MyPermissionResolver

realm = com.foo.bar.realm.MyCustomRealm

realm.permissionResolver = $permissionResolver

...

与PermissionResolver 有相似概念的RolePermissionResolver 通过角色执行权限检查。RolePermissionResolver 的关键区别是输入的字符串是一个角色名,而不是一个权限字符串。

在Shiro 中授权有3种方式:

l 编写代码——你可以在你的Java 代码中用像if 和else 块的结构执行授权检查。

l JDK 的注解——你可以添加授权注解给你的Java 方法。

l JSP/GSP 标签库——你可以控制基于角色和权限的JSP 或者GSP 页面输出。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_66109360/article/details/129624246

shiro_06_shiro标签使用以及shiro会话机制_一夏洛克一的博客-爱代码爱编程

shiro标签使用 前面介绍权限认证时,说了有3种方式:编程式授权,jsp标签,注解式授权,没测试一下,这一篇来测试一下shiro的标签的使用: 也可以参考官方文档:jsp标签 首先要引入标签:在jsp页面加 <%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags"

shiro (三)之授权加注解式权限_cjl_2020的博客-爱代码爱编程_setstringpermissions

重点: 1.添加角色和权限的授权方法   //根据username查询该用户的所有角色,用于角色验证   Set<String> findRoles(String username); 代码分享: select r.roleid from t_shiro_user u,t_shiro_role r , t_shiro_user_rol

shiro入门详解以及使用方法、shiro认证与shiro授权-爱代码爱编程

shiro介绍 什么是shiro shiro是Apache的一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。它可以实现如下的功能

shiro 授权和注解开发-爱代码爱编程

shiro 授权和注解开发 shiro授权shiro注解式开发 数据库的表设计: shiro授权 在ShiroUserMapper.xml中新增内容 <!-- 这是根据用户id获取到所拥有的

Shiro框架:认证和授权原理-爱代码爱编程

前言 Shiro作为解决权限问题的常用框架,常用于解决认证、授权、加密、会话管理等场景。本文将对Shiro的认证和授权原理进行介绍: Shiro可以做什么?、Shiro是由什么组成的?举个Shiro的例子呗?Shiro认证的原理是咋样的?Shiro授权的原理是咋样的?(若文章有不正之处,或难以理解的地方,请多多谅解,欢迎指正) 1. Shiro可以做

shiro登录机制及获取登录前地址,跳转到指定页面-爱代码爱编程

一、shiro的登录机制 登录操作一般是由用户去触发的,有用户名,密码,记住密码等(密码加密方式可根据自己需要) String username = request.getParameter("username"); String password = request.getParameter("password"); Boolean flag

【Shiro 自学笔记三】Shiro 的授权机制-爱代码爱编程

文章目录 授权的概念主体资源权限角色授权的类型基于角色的访问控制基于资源的访问控制判断是否授权编程式注解式标签式实现授权和判断 这一期来了解一下 Shiro 的授权。 授权的概念 主体 主体,即访问应用的用户,在 Shiro 中使用 Subject 代表用户。用户只有授权后才允许访问相应的资源。 资源 在应用中用户可以访问的任何东

java私塾 shiro_Shiro授权(Authorization)-爱代码爱编程

Authorization概述 n概述 授权,又称作为访问控制,是对资源的访问管理的过程。换句话说,控制谁有权限在应用程序中做什么。 授权检查的例子是:该用户是否被允许访问这个网页,编辑此数据,查看此按钮,或打印到这台打印机?这些都是决定哪些是用户能够访问的。 n授权的三要素 授权有着三个核心元素:权限、角色和用户 。 我们需要在应用程序中

【源码分析】shiro认证和授权-爱代码爱编程

引言 JWT与Shiro结构示意:JWT无需Cookie,而Shiro可在任何环境下使用session(其自定义session会话管理 当同一个realm域分别拆成构造安全数据(放用户私有服务)与获取安全数据(放公共模块)的两个类时,对应的配置文件在构建realm时得return对应的类。 @Bean public LecRealm getRealm

Shiro授权登录讲解+实战-爱代码爱编程

前言 Shiro 是什么? Shiro 是一个功能强大且易于使用还很灵活的 Java 开源安全框架; 可以干净地处理身份验证、授权、企业会话管理、单点登录和加密服务。 出自 Apache 、也叫 Apache Shiro Shiro 能干什么? 1)验证用户身份; 2)用户访问控制;比如用户是否被赋予了某个角色,是否允许访问某些资源 3

shiro认证与授权-爱代码爱编程

1.shiro认证 1.1.身份验证 身份验证:一般需要提供如身份ID等一些标识信息来表明登录者的身份,如提供email,用户名/密码来证明。 在shiro中,用户需要提供principals(身份)和credentials(证明)给shiro,从而应用能验证用户身份。 principals:身份,即主体的标识属性,可以是任何属性,如用户名、邮箱等

JWT与Shiro框架认证与授权详解-爱代码爱编程

本文的代码例子是项目中的代码,单纯理解基础可以不看代码 目录 一)JWT与Shiro基础: 1、单点登录: 2、JWT 二)SpringBoot整合JWT与shiro。 一)依赖导入及令牌的创建         1、导入JWT与shiro需要的MAVEN依赖。              2、创建JWTUtil类用于创建、解密和验证

Shiro权限框架认证和授权原理介绍-爱代码爱编程

1、简介 shiro是一个安全框架,是Apache的一个子项目。shiro提供了:认证、授权、加密、会话管理、与web集成、缓存等模块。 1.1、模块介绍 Authentication:用户身份识别,可以认为是登录;Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否

shiro认证&shiro授权_追梦梓辰的博客-爱代码爱编程

shiro认证: 重要: 在 shiro 中,用户需要提供principals (身份)和credentials(凭证)给shiro,从而应用能验证用户身份 即帐号/密码 1.导入基于Shiro的数据库脚本 关联关系:

springboot整合shiro+jwt实现认证授权_阳光不锈@的博客-爱代码爱编程

1.Shiro用来认证用户及权限控制,jwt用来生成一个token令牌,暂存用户信息。令牌存储在客户端,用户每次请求将其放在header中,在每个服务器节点进行验证。 2.导入依赖库: <dependency> <groupId>org.apache.shiro</groupId> <artifactId&

shiro中的验证用户身份认证以及授权_shiro认证和授权过程-爱代码爱编程

目录 1.运用shiro进行用户身份认证:  1.1导入基于Shiro的数据库脚本 1.2.引入依赖(shiro-1.4.1)   shiro-core  shiro-web  shiro-spring 1.3.自定义Realm 1.4.Spring与Shiro集成   1) 配置自定义Realm   2) 注册安全管理器   3) 配置