Shiro授权详解

Shiro中的认证和授权流程是怎样的? 【代码】Shiro中的认证和授权流程是怎样的? 阅读详情

在进行Shiro授权之前,了解相关术语对于理解整个过程至关重要。Shiro的授权机制以角色为中心,辅以权限,来控制主体对资源的访问。以下是常用术语的简要介绍:

  • 授权 (Authorization)
    授权是指确定主体是否有权访问某一资源或执行某一操作。通过角色和权限机制,Shiro为系统提供了细粒度的访问控制能力

  • 主体 (Subject)
    主体是指当前的用户、设备或其他能与应用进行交互的实体。每个主体在登录后,会被分配一定的权限和角色来确定其行为

  • 资源 (Resource)
    资源可以是系统中的任意数据或服务,例如文件、API接口等,主体通过权限来访问这些资源

  • 权限 (Permission)
    权限是允许主体执行某个具体操作的规则。Shiro的权限是基于字符串的,可以通过自定义规则实现不同的访问控制策略

  • 角色 (Role)
    角色是权限的集合,主体通过被分配某些角色来获得一系列权限。例如,一个"管理员"角色可能包含创建、更新、删除等权限

  • 隐式角色 (Implicit Role)
    隐式角色是指由系统规则自动分配的角色,无需明确配置。通常基于上下文、属性等信息动态确定

  • 显式角色 (Explicit Role)
    显式角色是通过明确配置的角色,例如在数据库中定义或直接在代码中指定的角色

1. 授权

授权是Shiro中重要的核心功能,通过角色和权限实现系统的安全控制

(1) 授权流程

Shiro的授权过程分为以下几步:

  1. 主体登录
    主体通过身份验证(认证)后,进入授权流程。Shiro通过Subject对象获取当前用户信息

  2. 权限检查
    当主体尝试访问某一资源时,Shiro首先通过SecurityManager查询该主体的权限信息。系统会根据配置的Realm来判断主体是否有权限

  3. 角色检查
    若主体的权限不足,Shiro还会查询主体所属的角色,检查该角色是否具备访问资源的权限

  4. 结果返回
    根据查询结果,Shiro决定是否允许主体访问对应资源。如果授权失败,Shiro会抛出UnauthorizedException异常

(2) 授权方式

Shiro支持多种授权方式,满足不同系统需求

  1. 基于角色的授权
    通过角色为主体赋予一组权限,这种方式适合结构清晰、权限划分明确的场景

    subject.hasRole("admin") //判断主体是否拥有“admin”角色
  1. 基于权限的授权
    直接为主体赋予特定的权限,通常使用字符串标识权限,具有高度灵活性

    subject.isPermitted("file:read")//判断主体是否具备“文件读取”的权限
  2. 基于注解的授权
    Shiro还提供了注解方式,通过注解可以直接在控制器、服务方法中指定授权规则

    @RequiresRoles("admin") 或 @RequiresPermissions("user:update")
2. SpringBoot+Shiro授权

将Shiro与SpringBoot集成是目前比较主流的实践,通过简单的配置即可为SpringBoot项目增加灵活的授权控制

(1) 静态授权

静态授权是指在代码或配置文件中提前定义好角色和权限的关系,不依赖运行时动态数据。这种方式适合权限结构简单的场景

  1. 配置静态授权规则
    在Shiro的配置文件中为不同角色配置权限:

    shiro:
      roles:
        admin: "file:create,file:read,file:update"
        user: "file:read"
    
  2. 代码中基于角色或权限的判断
    在代码中可以使用以下方式进行静态授权:

     System.out.println("调用MyShiroRealm的doGetAuthorizationInfo获取权限信息");
            //获得权限信息
            User user = (User) principalCollection.getPrimaryPrincipal();
            SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
            info.addRole(user.getRole().getRoleName());
            info.addStringPermission("用户列表");
            //管理增删改
            if ("管理员".equals(user.getRole().getRoleName())) {
                info.addStringPermission("用户添加");
                info.addStringPermission("用户编辑");
                info.addStringPermission("用户删除");
            }
(2) 动态授权

动态授权通过数据库或外部服务来实现对权限的实时控制。此方式更加灵活,适合权限体系复杂、需要频繁调整权限的场景

  1. 动态角色与权限的加载
    通过自定义Realm从数据库中加载角色和权限:

    System.out.println("调用MyShiroRealm的doGetAuthenticationInfo获取身份信息");
    //获得身份信息
    UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
    String usrName = token.getUsername();
    User user = userService.getUserByUsrName(usrName);
    if (user == null) {
          throw new AuthenticationException();//账号错误
    }
    if (user.getUsrFlag() == null || user.getUsrFlag().intValue() == 0) {
          throw new LockedAccountException();//账号被禁用
    }
    SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(
                    user,
                    user.getUsrPassword(),
                    getName());

  2. 结合动态数据判断
    使用动态方式可以根据业务需求实时调整权限,例如根据用户角色动态生成权限菜单

    Subject currentUser = SecurityUtils.getSubject();
    
    // 动态判断用户是否有管理员角色
    if (currentUser.hasRole("admin")) {
         return "你好admin";
    } else {
         return "角色不存在!";
    }

Shiro认证流程和授权流程 认证:身份验证,即在应用中谁能证明他就是他本人。一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明。 在shiro中,用户需要提供principals (身份)和credentials(证明)给shiro,从而应用能验证用户身份: principals:身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。一个主体可以有多个principals 阅读详情

相关推荐

Jeesite 登录login涉及到shiro验证和授权的流程分析

实习生阶段:进来公司没任何培训,给了我们几个实习生一个月的时间自学SSM框架、掌握开源JeeSite框架和使用JeeSite开发一个小demo(突然感觉头有点大,没人带)然后自己被分配了做涉及使用shiro的登录模块的开发,随时做下笔记,第一次写博客,第一篇博客在此主要分析一下下Jeesite 登录时通过shiro验证和授权的主要流程(关于shrio,先学习下快速入门的使用知识,http://www.cnblogs.com/learnhow/p/5694876.html

【Shiro】3. Shiro授权流程

授权 授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。 授权的关键对象 授权可简单理解为Who对What / Which进行How操作。 Who:主体(Subject),主体需要访问系统中的资源。 What / Which:资源(Resource),如系统菜单、页面、按钮、类方法、系统商品信息等。资源包括资源类型和资源实例,比如商品信息为资源类型,类型为Type01的商品为资源实例,编号为001的商品信息也属于资源实例。

xiaoyuan_27的博客 962

shiro 权限认证以及授权demo

shiro 权限认证以及授权demo

Shiro的认证和授权过程

认证:是一个身份验证的过程,要证明他们的身份,需要提供principals(身份)和credentials(凭证)。身份有多种,包括邮箱,账号等能表示subject身份的信息,凭证有密码,指纹,数字证书等。一般就是登录,获取账号和密码。 认证过程主要分为三步: step1:收集subject的principals(身份)和credentials(凭证) 1.首先拿到当前currentUser, Subject currentUser = SecurityUtils.getSubject(); 1.1利用c

weixin_44736853的博客 2473

一、qt下载与安装

qt与qtcreator 的区别与联系 1、QT Creator只是一个集成的编译器,用于将源代码编译成可执行程序。 QT 是跨平台C++图形用户界面应用程序开发框架,可以简单理解成是一个开发包。 2、Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程。 QT Creator 跨平台的 Qt IDE,Qt Creator 是 Qt 被 Nokia 收购后推出的一款新的轻量级集 ...

yiye_pianzhou的博客 2219

COMSOL模拟CO2驱替CH4:多物理场耦合建模与工程应用详解

在非常规天然气开发与碳封存工程中,多孔介质内的渗流、吸附与岩石变形相互耦合,使得CO2驱替CH4的产能预测和CO2封存评估无法仅靠经验公式完成。以达西定律描述裂隙流动、以扩展Langmuir方程刻画竞争吸附、用应力-吸附-渗透率关系关联煤岩变形,是多物理场耦合数值模拟的核心路径。COMSOL Multiphysics凭借内置渗流、固体力学与组分传递接口,能够将这些机制整合为可参数化扫描的仿真模型,为注气压力、井距、渗透率演化等方案设计提供量化依据。围绕CO2驱替CH4模拟的建模流程、参数取法与结果判读,可形

weixin_29574585的博客 162

Shiro 授权过程

Shiro 授权过程

weixin_43145065的博客 282

在LinuxMint 22.1(Ubuntu24.04)上安装使用同花顺远航版

Linux用户成功在LinuxMint22.1系统上通过Wine9.0运行同花顺远航版,解决了长期困扰的股票行情软件问题。此前Linux原生版同花顺功能简陋且停止更新,Wine版通达信存在显示问题。作者作为自由软件支持者,通过调整Wine配置文件解决了高分屏显示异常问题,实现了远航版的正常使用。期待同花顺能重启Linux原生版开发,支持更多处理器架构,完善国产软件生态。该方案为Linux股票软件用户提供了实用参考。

5140

shiro权限框架详解05-shiro授权

介绍shiro授权的流程、自定义realm实现授权

在路上 6502

90+个各种疾病相关医疗数据集

含新冠、传染病、医学图像等

2万+

如何从RHEL 8升级到RHEL 9

Red Hat 于 2022 年 5 月 17 日宣布全面推出 RHEL 9。这是 RHEL(Red Hat Enterprise Linux)的最新版本,它具有许多功能和增强功能。

u012748257的博客 1019

Shiro 认证授权详解

1     权限管理1.1用户身份认证1.1.1  概念         身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。1.1.2  用户名密码身份认证流程1.1.3  关键对象      ...

皓晨的架构笔记 8308

13、基于RBF的自适应鲁棒控制与反步控制方法及实现

本文介绍了基于RBF神经网络的自适应鲁棒控制与反步控制方法,详细阐述了控制系统的程序结构、核心算法及实现流程。通过Simulink搭建仿真系统,利用RBF网络逼近系统中的不确定非线性函数,并结合Lyapunov稳定性理论设计控制律,实现了对倒立摆等复杂非线性系统的高精度跟踪控制。文章还提供了完整的MATLAB/Simulink代码示例和仿真结果分析,验证了该方法的有效性与鲁棒性,为实际工程应用提供了可行的技术路径。

ol789012的博客 88

Shiro 框架详解之授权

授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等)。在授权中需了解的几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、角色(Role)。 主体 主体,即访问应用的用户,在Shiro中使用Subject代表该用户。用户只有授权后才允许访问相应的资源。 资源 在应用中用户可以访问的任何东西,比如访问JSP页面、查看

KHOST的博客 454

基于matlab的CNN验证码识别系统(UI界面版)

基于matlab的CNN验证码识别系统(UI界面版),CNN验证码识别系统包括数据集处理、模型搭建、模型训练、界面设计与实现

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 485

【异常】Cursor导入Karpathy指南失败解决方案Failed to import GitHub/GitLab rules: Error executing git: Cloning into

摘要:本文解决了Git克隆单个文件报错的问题,指出git clone只能克隆整个仓库而非单个文件。提供了两种解决方案:1) 推荐手动创建规则文件,在Cursor项目中新建.mdc文件并粘贴Karpathy行为指南完整内容;2) 备选克隆整个仓库获取文件。指南包含编码行为规范,强调简单性、精准修改和明确目标。还说明了如何设置全局规则和即时生效的方法。

奶爸的编程之路,也就一周冷个三天 174

Shiro认证授权详解

https://blog.youkuaiyun.com/chen_changying/article/details/79714112

weixin_44591832的博客 232

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Shiro授权(Authorization)详解

授权,即访问控制,它决定了某个用户在应用程序中是否有权限执行某个操作或访问某个资源。通过授权,可以保护应用程序免受未经授权的访问,确保只有合法的用户才能访问特定的资源或执行特定的操作。

2401_82552126的博客 927

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

shiro授权管理方式详解

一.概述  1.授权,又称作为访问控制,是对资源的访问管理的过程。换句话说,控制谁有权限在应用程序中做什么, 通过使用shiro的授权功能,能够完成细粒度的权限控制。 2.授权的三要素   授权有着三个核心元素:权限、角色和用户 。   我们需要在应用程序中对用户和权限建立关联,通常的做法就是将权限分配给某个角色,然后将这个角色关联一个或多个用户。 二.s

wonabi的博客 1168

shiro入门详解以及使用方法、shiro认证与shiro授权

shiro介绍 什么是shiro shiro是Apache的一个开源框架,它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。它可以实现如下的功能: 1.验证用户 2.对用户执行访问控制,如:判断用户是否具有角色admin,判断用户是否拥有访问的资源权限。 3.在任何环境下使用SessionAPI。例如C/S程序 4.可以使用多...

lgxzzz的博客 333

JAVAWEB开发之权限管理(二)——shiro入门详解以及使用方法、shiro认证与shiro授权

上边的程序中使用的是Shiro自带的iniRealm。iniRealm从配置文件中读取用户的信息,大部分情况下需要从系统的数据库中读取用户信息,所以需要自定义Realm。// 设置Realm的名称@Override}// 支持UsernamePasswordToken@Override}// 用于认证@Override// token是用户输入的// 第一步从token中取出身份信息// 第二步:根据用户输入的usercode从数据库查询// 如果查询不到返回null。...

m0_54850825的博客 1314

(转)shiro权限框架详解05-shiro授权

http://blog.youkuaiyun.com/facekbook/article/details/54910606 本文介绍 授权流程 授权方式 授权测试 自定义授权realm 授权流程 开始构造SecurityManager环境subject.isPermitted()授权securityManager.isPermitted()执行授权Authorizer执行授权Real...

weixin_33941350的博客 115

JWT与Shiro框架认证与授权详解

一)JWT与Shiro基础: 1、单点登录: 了解JWT之前,我们先了解一下JWT的最多应用场景----单点登录。 图中有四个系统,sso只有登录的功能,1系统处理订单,2系统处理购物车,3系统处理用于数据的。如果没有单点登录,管理者就需要登录4次系统输入4次用户名和密码,这就导致我们要输入很多次用户名和密码。于是出现了单点登录,只需要在sso登录一次,然后所有与其绑定的信任系统都不用再次登录就可以使用。 再举一个简单的例子,淘宝和天猫是两个相互信任的系统,你会发现当你登录了天猫或者淘宝之后另一

weixin_60414376的博客 4334

安全框架之 Shiro 详解01:权限、架构、认证、授权

Shiro 是一个功能强大且易于使用的Java安全框架,它执行身份验证、授权、加密和会话管理。使用Shiro易于理解的API,您可以快速轻松地保护任何应用程序—从最小的移动应用程序到最大的web和企业应用程序。

m0_57587753的博客 241
上一篇: LinkedHashMap 简介
下一篇: CopyOnWriteArrayList详解
你也想高人一等啊?
博客等级 码龄5年 975粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值