shiro框架一 :基于URL粗粒度的页面拦截过滤

ShiroFilter工作原理、支持的过滤器、URL 匹配模式、URL 匹配顺序 ShiroFilter工作原理 Shiro提供了与Web集成的支持,其通过一个ShiroFilter入口来拦截需要安全控制的URL,然后进行相应的控制,ShiroFilter类似于如Strut2/SpringMVC这种web框架的前端控制器,其是安全控制的入口点,其负责读取配置(如ini配置文件),然后判断URL是否需要登录/权限等工作。 而要在Spring中使用Shiro的话,可在web... 阅读详情

对于shiro大家都不陌生,它是一个权限控制框架。
它对权限控制,主要分为两种方式。
1、粗粒度URL级别的权限控制
2、细粒度基于方法的权限控制

其实权限控制的话,也可以自己写,主要用到的技术有
自定义实现:实现权限控制, 可以自己写代码实现 (粗粒度权限控制 Filter、 细粒度权限控制 自 定义注解、代理、反射技术),博主能力有限就不自己写了,,,(其实是写不出来,,,)。还有一个SpringSecurity框架也很不错,大家可以了解一下
下面就来分别说一说这两种权限控制。

一:粗粒度的基于URL级别的权限控制

可以基于 Filter 实现
在数据库中存放 用户、权限、访问 URL 对应关系,页面访问一个URL地址,即 当前用户访问一个 URL 地址,查询数据库判断用户当前具有权限,是否包含这个 URL,如果包含允许访问,如果不包含 权限不足 ,如果用户对应权限列表中存在URL地址,则允许访问!!!
注意:这种所谓URL的权限控制,在访问URL的时候只会访问一次(即在本次访问中你只访问一次),即进行一次权限控制,而细粒度的权限访问,是基于方法的,它会在你一次访问中调用服务器的多个方法,也就是说它会在一个方法中调用多个方法,所以他可以进行多次方法控制(即:在一个代理对象方法中,调用多个权限控制方法,进行多次权限控制),所以它相比URL的权限控制更为的精细
如下代码////////////////////////////////////////////

二:细粒度基于方法实现的权限控制
可以代理、自定义注解实现, 访问目标对象方法,在方法上添加权限注解信息,对目 标对象创建代理对象,访问真实对象先访问代理对象,在代理对象查询数据库判断是否具有 注解上描述需要权限,具有权限 允许访问,不具有权限,拦截访问,提示权限不足

这里写图片描述

3:shiro的体系结构
1、 Authentication 认证 —- 用户登录,身份识别 who are you?
2、 Authorization 授权 — 用户具有哪些权限、角色 what can you do ? 3、 Cryptography 安全数据加密
4、 Session Management 会话管理
5、 Web Integration web 系统集成
6、 Interations 集成其它应用,spring、缓存框架
如下图所示
这里写图片描述
3.1 shiro运行的主要流程
ApplicationCode 用户编写代码
Subject 就是 shiro 管理的用户
SecurityManager 安全管理器,是 shiro 权限控制核心对象, 在编程时,只需要操作
Subject 方法, 底层调用 SecurityManager 方法,无需直接编程操作 SecurityManager
Realm 应用程序和安全数据之间连接器 ,应用程序 进行权限控制读取安全数据(数据 表、文件、网路 … ),通过 Realm 对象完成

登录流程: 应用程序 — Subject — SecurityManager — Realm — 安全数据

好了理论先说这么写,下面上代码
首先得有一个项目吧,我的是一个ssm框架

第1步:
引入shiro的jar包,为了省事,我这里引入了shiro的全部jar包

<dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-all</artifactId>
            <version>1.3.2</version>
        </dependency>

第2步:在web.xml中配置shiro

 <!--shiro的Filter-->
  <!--也就是说,在spring中就得有一个id为shiroFilter的bean-->
<filter>
  <filter-name>shiroFilter</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
  <filter-mapping>
    <filter-name>shiroFilter</filter-name>
    <url-pattern>/*</url-pattern><!--这里配置/*:即为拦截所有的资源-->
  </filter-mapping>

web.xml中引入shiro配置文件,如果不引入,可能会报No bean named ‘shiroFilter’ is defined的异常

<context-param>
    <param-name>contextConfigLocation</param-name>
    <!--<param-value>classpath:spring-mybatis.xml spring-service.xml</param-value>-->
    <!-- <param-value>classpath:spring-*.xml</param-value>-->
    <param-value>classpath:spring-mybatis.xml,
                    classpath:spring-shiro.xml,
    </param-value>
  </context-param>

第3步:在spring-springmvc.xml文件中,引入spring-shiro.xml配置文件
注:因为我是重新搭建了一个ssm。东西比较少,没有把spring文件整合springmvc和shiro、mybatis分开,所以spring的一些相关整合我直接写在了spring-springmvc.xml文件中了

 <!--引入shiro权限配置-->
    <import resource="spring-shiro.xml"></import>

第4步:编写spring-shiro.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context-4.0.xsd
                            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
                         ">

    <!-- 配置Shiro核心Filter  -->
    <bean id="shiroFilter"
          class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <!-- 安全管理器 -->
        <property name="securityManager" ref="securityManager" />
        <!-- 未认证,跳转到哪个页面  -->
        <property name="loginUrl" value="/login.html" />
        <!-- 登录页面页面 -->
        <property name="successUrl" value="/index.html" />
        <!-- 认证后,没有权限跳转页面 -->
        <property name="unauthorizedUrl" value="/unauthorized.html" />
        <!-- shiro URL控制过滤器规则  -->
        <!--这里配置过后,所有的请求都经过shiro,然后也只有一下配置了,不登录可以问的才能访问,其他(/**)的都需要登录后才能访问-->
        <property name="filterChainDefinitions">
            <value>
                /login.html* = anon   <!--*表示访问页面的同时,允许传递参数-->
                /css/** = anon     <!--两个**表示该文件夹以及该文件夹下的所有子文件夹 -->
                /js/** = anon
                /images/** = anon
                /services/** = anon
              <!--  /pages/base/courier.html* = perms[courier:list]
                /pages/base/area.html* = roles[base]-->
                /** = authc    <!--登录后才能访问-->
            </value>
            <!--
            anon  未认证可以访问
            authc  认证后可以访问
            perms 需要特定权限才能访问
            roles 需要特定角色才能访问
            user 需要特定用户才能访问
            port  需要特定端口才能访问
            reset  根据指定 HTTP 请求访问才能访问
            -->
        </property>
    </bean>

<!--安全管理器-->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    </bean>

    <!--shiro后处理器-->
    <bean id="lifecycleBeanPostProcessor"
          class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
</beans>

更多有关shiro的过滤器配置如下图所示
这里写图片描述

ok,下面可以运行我们的项目了,我们想要的结果是,无论我们访问哪个页面,如果未登录(其实这里没有写登录,但是这效果是有的),它就只能访问我们授权的那个页面,即login.html。
运行结果如下所示
这里写图片描述

项目中还有其他页面
这里写图片描述
那么我在地址栏中输入http://localhost:9600/index.jsp
还是会跳转到login.htmlz页面(因为index.jsp未经授权不能访问)

注意:在运行的时候遇见了一个bug:No bean named ‘shiroFilter’ is defined
jar添加了,web.xml的过滤我配置了,spring的引入文件我也引入了,。。。怎么会说没有找到该类呢。
后来才发现,还需要在web.xml文件中引入spring-shiro.xml的配置文件。
标签的意思是初始化启动了.表示找到sprign的配置文件并加载上

Springboot + shiro 整合之Url拦截设置 shiro 整合到springboot 还是比较简单的,只需要新建一个spring-shiro.xml的配置文件: 阅读详情

相关推荐

SpringBoot+Shiro权限配置实战:避免/profile路径的拦截陷阱

在Java企业级应用开发中,权限控制是保障系统安全的核心机制。Apache Shiro作为一款强大且易用的安全框架,通过与SpringBoot集成,为开发者提供了身份认证、授权、会话管理等一站式解决方案。其核心原理在于过滤器链(Filter Chain),它像一道安检门,对每个HTTP请求进行拦截与校验,确保只有具备相应权限的用户才能访问特定资源。这项技术的价值在于,它能从架构层面统一管理访问控制逻辑,大幅降低业务代码的安全耦合度,是构建后台管理系统、内部运营平台的必备基础。在实际应用场景中,用户个人中心(

weixin_34347651的博客 534

Shiro实现URL自定义拦截

最近做的一个功能使用shiro对接口进行权限限制。也就是说,当前端请求到后台时,首先判断用户是否具有请求该接口的权限,如果有权限,才能进行访问后台API。 1、自定义权限过滤器 package com.cat.arain.web.shiro; import org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter; imp

雨落成追忆 2万+

Springboot整合Shiro及redis做缓存

一、权限控制 1、粗粒度URL级别权限控制 2、 细粒度方法级别权限控制 二、 权限控制相关数据表 三、 Shiro框架 1、 Shiro运行主要运行流程 2、 认证与授权的执行流程分析 (一) 、认证流程 (二) 、授权流程 3、 URL 级别粗粒度权限控制 4、 shiro中的过滤器 5、 方法级别细粒度权限控制 6、 Shiro页面元素显示控制 四、 缓存框架 EhCache 1、缓存注解 ...

csweldn520的专栏 550

shiro学习四(Spring boot整合shiro读取数据库中的url实现接口请求过滤认证)

一、本篇概述 前面两篇中有讲解Spring boot整合shiro如何通过读取ini文件,数据库用户数据实现登录和权限认证授权等,那么就有人问了,我如果通过数据库中存储的当前用户可以访问哪些rul,来实现过滤当前用户可以访问哪接口或者是可以访问哪些页面,那么该怎么做呢?与上篇博客一样,因篇幅原因粘贴部门重要的代码,全部的代码下载demo案例 二、pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http..

bird_tp的博客 1138

基于Shiro 拦截URL,实现权限控制

NULL 博文链接:https://vti-iteye.iteye.com/blog/1963397

spring boot整合shiro实现url请求过滤

本demo为Spring boot整合shiro,以mybatis plus做dao层交互数据,实现了读取数据库用户数据实现用户登录,权限认证,读取数据库中用户对应的url请求,实现请求的过滤。自定义了relam和过滤器来实现这些功能

shiro自定义拦截url

  在实际项目上,我们针对不同的用户(guste,user,admin,mobile user)等等,需要进入不同的页面,比如,手机端用户需要进入Mobile/这个路径下的,这个时候,我们需要自定义拦截url,就比如下面的url: 电脑端用户登录页面 http://localhost:8080/login 手机端用户登录页面 http://localhost:8080/mobile/log...

weixin_30340775的博客 414

利用AI辅助工具Codex在30分钟内高效生成发明专利说明书草案

Codex 是什么?简单说,它是 OpenAI 推出的一个高级 AI 工作平台,最初定位是软件开发辅助工具,但现在它的能力边界已经远远超出了写代码。根据 OpenAI 官方信息,每周有超过 500 万人使用 Codex,其中 40% 的新用户是非开发者,包括分析师、营销人员、研究人员等。这意味着 Codex 正在从一个程序员专属工具,演变为一个面向广泛知识工作者的生产力中枢。 那么,它和我们今天要谈的“写发明专利”有什么关系?核心在于 Codex 的“角色专属插件”和“上下文构建”能力。它不再只是根据零散的

weixin_29053067的博客 318

shiro 同时实现url和按钮的拦截_Shiro权限管理框架(一):Shiro的基本使用

其实关于Shiro的一些学习笔记很早就该写了,因为懒癌和拖延症晚期一直没有落实,直到今天公司的一个项目碰到了在集群环境的单点登录频繁掉线的问题,为了解决这个问题,Shiro相关的文档和教程没少翻。最后问题解决了,但我觉得我也是时候来做一波Shiro学习笔记了。先给自己定个博客计划吧,不然很可能又要难产了。本次预计的篇幅量在三篇,第一篇先记录一下Shiro的基本使用,第二篇写一下基于Shiro实现的...

weixin_29051245的博客 223

tree_sitter多语言解析器配置实战指南

本文是一份详细的Tree-sitter多语言解析器配置实战指南。文章从零开始,手把手指导如何搭建Python环境、安装指定版本的tree-sitter库、下载并编译多种语言的语法规则,最终构建一个统一的解析器库。通过实战代码演示了如何初始化解析器、解析代码并遍历语法树,旨在帮助开发者高效处理多语言代码分析任务,并分享了高级技巧与常见问题排坑经验。

weixin_29245767的博客 267

用Python玩转Carla-Apollo联合仿真:手把手教你实现自动驾驶测试

本文详细介绍了如何使用Python实现Carla-Apollo联合仿真,从环境搭建到自动驾驶算法测试的全流程。通过Carla提供的高逼真仿真环境和Apollo的自动驾驶算法栈,开发者可以高效验证感知、规划和控制模块。文章包含环境配置、Python API操作、桥接实现及实战测试,为自动驾驶开发提供完整解决方案。

wasm7browser的博客 266

springboot整合shiro最全功能

springboot整合shiro,实现登录认证,登录过期,权限拦截 1、权限控制的两种方式:粗粒度基于URL级别权限控制、细粒度基于方法级别权限控制 2、基于Apache Shiro实现登录认证和权限控制,重点讲解shiro权限控制流程、自定义Realm对象控制系统认证和授权 3、Apache Shiro实现细粒度方法级别权限控制 4、动态系统菜单显示功能 5、对认证和授权数据进行缓存优化 粗粒...

qq_41714882的博客 3130

lego-loam featureAssociation 源码注释(五)

上一次我们已经看完了特征提取,这次我们进入特征匹配的内容!!!systemInitedLM的初始值为false。

Joeybee的博客 886

shiro 同时实现url和按钮的拦截_如何基于shiro实现权限管理开发(入门篇)?

只要有用户参与的系统一般都要有权限管理,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。权限管理包括用户认证和授权两部分,权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。【如何控制权限】▲基于角色的权限控制RBAC(role based access ...

weixin_39658474的博客 146

手把手教你用Docker快速部署ZLMediaKit流媒体服务器(含WebRTC配置)

本文详细介绍了如何使用Docker快速部署ZLMediaKit流媒体服务器,并配置WebRTC功能。通过容器化部署,实现环境一致性、资源隔离和快速扩展,同时提供WebRTC专项配置、多协议推拉流实战测试及生产环境优化建议,帮助开发者高效搭建企业级流媒体平台。

agile9scrum的博客 202

YOLO26改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块

本文记录的是。YOLO26主要用于轻量化应用部署,相关轻量化改进与其整体架构非常适配。StarNet设计简洁,没有复杂的设计和精细调整的超参数,仅是一个 4 阶段的分层架构。并且其中能够在低维空间计算的同时考虑极高维的特征这一特性,进而提高模型精度。本文在替换骨干网络中配置了原论文中的starnet_s1starnet_s2starnet_s3和starnet_s4七种模型,以满足不同的需求。

Limiiiing的博客 1091

粗粒度与细粒度权限控制

1.1 什么是粗粒度和细粒度权限 粗粒度权限管理,对资源类型的权限管理。资源类型比如:菜单、url连接、用户添加页面、用户信息、类方法、页面中按钮。。 粗粒度权限管理比如:超级管理员可以访问户添加页面、用户信息等全部页面。 部门管理员可以访问用户信息页面包括 页面中所有按钮。 细粒度权限管理,对资源实例的权限管理。资源实例就资源类型的具体化,比如:用户id为001的修改连接...

小兵qwer的专栏 696

一文读懂 SAP ERP / SAP S/4HANA 里的 Price List:概念、配置、定价流程与可运行 ABAP 示例

SAP ERP/S4HANA中的Price List解析 本文系统阐述了SAP定价体系中Price List的核心概念和实现机制。Price List并非独立的价目表,而是通过条件技术(条件类型、访问序列、条件记录)与Price List Type(PLTYP)共同作用的定价维度。文章详细说明了: Price List本质上是客户主数据中的PLTYP字段,作为定价查找键使用 定价流程中条件访问序列如何利用PLTYP查找特定价格 S4HANA与ECC版本在价格维护入口的差异 实际业务中如何通过不同PLTYP实

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 658

Apache Shiro权限框架

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。...

fwdwqdwq的博客 507

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

shiro对资源如何做权限控制即怎么设计哪些资源需要哪些权限

**我们使用shiro进行权限控制 有以下四种方式** **1. &amp;nbsp;URL拦截权限控制:基于filter过滤器实现** 我们在spring配置文件中配置shiroFilter时配置 &amp;lt;!--指定URL级别拦截策略 &amp;nbsp;--&amp;gt; &amp;lt;property name=&quot;filterCh

qq_28000789的博客 1680

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

shiro框架三:基于URL粗粒度的用户授权

撒旦法撒旦法第三方撒旦法撒大放送的

java_xxxx的博客 743

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Shiro登录验证与鉴权核心流程详解

本文系统解析了Shiro框架在Web安全架构中的登录验证与权限控制机制。Shiro通过过滤器链实现URL级别的粗粒度校验,结合拦截器完成方法级细粒度权限控制,形成双层安全防护体系。文章详细剖析了核心组件(如Subject、SecurityManager、Realm等)的协同工作原理,梳理了登录验证流程的关键方法调用链路,并重点分析了过滤器与拦截器的实现逻辑。通过七个维度的深度拆解,为开发者提供了构建安全防护体系的实践指导,帮助实现从请求入口到业务逻辑的全链路安全管控。

Debug日记的博客 754

【JAVA面试题整理】框架之Shiro

一、简单介绍一下Shiro框架 ApacheShiro是java的一个安全框架。使用shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。 三个核心组件:Subject、SecurityManager、Realms Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程,后台账户(DeamonAccout)或其他类似事物。它

m0_67401228的博客 269

Shiro(四)——通过注解实现权限拦截(基于角色和基于权限)、Shiro的Jsp标签、Shiro 缓存

一、通过注解实现权限拦截 1、粗粒度和细粒度的权限控制 上篇博客中,通过 URL地址进行权限控制,属于粗粒度的权限控制。 基于过滤器来实现的基本上都是粗粒度的权限控制。因为一个页面中可能有很多请求,可能 A 方法允许你调用,但是 B 方法就不允许了,但是他们都属于一个页面,那么仅靠之前的 url 来控制就不能实现。 如果是基于注解实现的权限控制,可以精确到每一个 service 方法,底层实现的是 AOP。所以细粒度的权限控制一般在 service 层实现。 权限保存在数据库中,其实从技术角度来讲,权限也就

qq_41824825的博客 4095
上一篇: idea找不到spring的配置文件
下一篇: shiro框架二:基于URL粗粒度的用户登录
java_xxxx
博客等级 码龄9年 127粉丝 99原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值