shiro过滤器,web.xml中默认访问页面,springMVC拦截器执行顺序

基于SSM的实验室管理微信小程序:从技术选型到二次开发全解析 在Java Web开发领域,SSM框架(Spring+SpringMVC+MyBatis)一直是传统企业级应用与高校教学项目的经典组合。对于需要快速搭建微信小程序后端服务的开发者而言,SSM不仅能够清晰展示分层架构与事务控制原理,还能与小程序前端高效协同,完成预约、审批、设备管理等典型业务流程。本文以实验室管理微信小程序为例,从用户角色权限模型、核心数据表设计、预约冲突检测SQL,到后端登录鉴权、小程序请求封装与联调部署,系统梳理了一套可落地的实战路径。同时结合二次开发建议,帮助读者避开实验室预约系统中常见 阅读详情

1,环境

在我自己的一个在web项目使用了shiro的Filter,让shiroFilter来代理整个web的FiltershiroFilter的大致配置如下:

    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
      <property name="securityManager" ref="securityManager" />
      <property name="loginUrl" value="/" /><!-- 访问需要认证的地址时,没有认证跳转的地址,默认为login.jsp -->
      <property name="unauthorizedUrl" value="homePage" /> <!-- 登录后,没有访问权限将跳转到homePage -->
      <property name="filterChainDefinitions">
      <!-- **表示匹配0个或多个路径 ,*表示匹配0个或多个字符串,?表示匹配一个字符 -->
        <value>
          /preLogin                =     anon
          /toLogin                 =     anon
          /userregister            =     anon
          /registerpage            =     anon
          /static/**               =     anon
          /login                   =     anon
          /logout                  =     logout
          /analysis/test           =     authc
          /analysis/test1          =     authc,perms[admin:edit] <!--要有 admin:edit的权限 -->
          /**                      =     user  <!-- 主要针对rememberMe功能 ,当使用authc时,还是要认证才能访问 -->
        </value>
      </property>
    </bean>

在web.xml中shiroFilter的配置如下:

<filter>
    <filter-name>shiroFilter</filter-name>
    <!-- DelegatingFilterProxy作用是自动到spring容器查找名字
            为shiroFilter(filter-name)的bean并把所有Filter的操作委托给它 -->
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>shiroFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

配置的Filter管理所有的访问控制。

同时在项目中还在web.xml中指定了一个项目欢迎页面。代码如下:

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list> 

而在欢迎页面是一个jsp的跳转标签,用来跳转到真正项目的首页。index.jsp如下:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<jsp:forward page="/preLogin" />

这里跳转的preLogin就是项目真正的首页。
同时在springMVC中也配置了相关拦截器用来判断用户是否登录,若未登录则跳转到登录界面。拦截代码如下:

public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
            Object handler) throws Exception {
        String urlPath = request.getRequestURL().toString();
        if(urlPath.matches(Const.StaticPath)) { //访问的url是静态资源
            return true;
        } else { //访问其他的非静态资源的url,当前仅判断用户是否登录,若未登录则跳转到登录界面
            User user = (User)sessionUtil.getSessionAttribute(Const.currentUser);
            if(user != null) { //用户已登录
                return true;
            } else { //用户未登录
                response.sendRedirect(request.getContextPath() + Const.Login);
                return false;
            }
        }
        //return true;
    }

因为刚开始学习shiro所以这几个拦截访问混在一起就搞不清楚谁先访问谁后访问,以及shiro判定访问权限后再如何跳转。

2,探索过程

 web的过滤器与springMVC拦截器的访问顺序参考http://blog.youkuaiyun.com/chenleixing/article/details/44573495。
    通过这篇博客可以知道过滤器Filter的优先级是要大于springMVC的拦截器Interceptor的。或者说,当有访问来到时,是先执行Filter里的逻辑,然后在执行Interceptor的。而shiro的Filter会代理web的Filter,所以会先执行shiro的过滤器在执行springMVC的拦截器。在给程序打断点,F6一步一步执行的过程中也可以发现这一点。
     那么在web.xml中设置的欢迎页面与shiroFilter谁会先执行呢?
再回答这个问题的时候,要先看看我写的shiroFilter的配置。

<property name="loginUrl" value="/" /><!-- 访问需要认证的地址时,没有认证跳转的地址,默认为login.jsp -->
<property name="unauthorizedUrl" value="homePage" /> <!-- 登录后,没有访问权限将跳转到homePage -->

用户没有认证时(即没有执行subject.login()方法)若有权限的限制,会到转到根目录即index.jsp页面,而index.jsp页面又会马上跳转到preLogin页面。当我在页面上输入http://localhost:8080/spiderAndAnalysis/(即:访问项目的根目录/时)我就搞不清楚到底是通过Filter访问的preLogin页面还是直接先访问的index.jsp页面未经过Filter。所以后来我将< property name=”loginUrl” value=”/” />的value换成了analysis,再次访问项目根目录,发现这次直接跳转到了analysis页面。所以shiroFilter的优先级高于欢迎界面,即在配置了shiroFilter管理web访问时,所有请求都要先经过shiroFilter,再经过其他过滤器拦截器等。

3,shiroFilter部分参数的含义

     在配置shiroFilter的时候用到了loginUrl,unauthorizedUrl以及filterChainDefinitions等参数。个人理解的配置含义:
    loginUrl:当用户未认证(即:未执行subject.login()函数登录成功),若此时访问有访问权限的url时,会跳转到loginUrl指定的登录界面,若访问无权限的url则会直接访问。
以本文的配置为例:若直接访问preLogin ,toLogin ,userregister这类没有访问权限的url时,将直接访问,不用跳转。若访问analysis/test这个url,并且用户未登录时,将跳转到loginUrl指定的登录界面。
    unauthorizedUrl:当用户认证了,访问了没有权限访问的url时会跳转到unauthorizedUrl指定的地址。例如:用户A已经登录但是用户A只有admin:add权限时,用户A访问analysis/test1这个需要admin:edit权限的url时,将跳转到unauthorizedUrl指定的homePage地址。

Win10下ISE14.7 iMPACT闪退?三步搞定DLL替换(附详细路径) 本文详细介绍了在Windows 10系统下解决Xilinx ISE14.7 iMPACT工具闪退问题的三步DLL替换方案。通过替换关键DLL文件,有效解决了FPGA开发中的兼容性问题,帮助开发者快速恢复工作流程。 阅读详情

相关推荐

计算文本相似度的常用算法

NLP、数据挖掘领域中,文本分析是一个很重要的领域,这有助于我们去让计算机理解语言的作用和使用。文本分析是数据挖掘的重要手段,利用文本分析,我们将很快的读取到一本书、一篇文章、一段话中的关键词和核心思想,而文本相似度就是我们用来剔除无用信息或者重复信息的重要手段,让计算机去找文本中的不同。 在生活中,信息检索、数据挖掘、机器翻译、文档复制检测等领域都应用到“文本相似度”。文本不仅仅是文字,文本相似度的应用更广,除了文字的匹配,还可以是图片、音频等,因为它们的实质都是在计算机中都是以二进制的方式存在的。相.

氧小氢的博客 2万+

拦截器与过滤器的区别以及他们的执行顺序

转自:http://www.jobui.com/mianshiti/it/web/5122/ 过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 st

winwll的专栏 1080

基于LTspice的共模电感差模/共模插入损耗仿真指南

在电源与EMC设计领域,插入损耗是衡量滤波器件抑制噪声能力的核心指标。共模电感作为EMI滤波器中最常见的元器件之一,其差模与共模插入损耗特性直接影响整体滤波方案的合规性。然而,仅依赖规格书曲线往往难以覆盖真实应用中的阻抗条件,借助SPICE仿真工具进行电路级验证已成为工程师常用的手段。LTspice凭借其轻量、高效的交流分析能力,能够帮助设计者快速搭建共模电感等效模型,并通过调整耦合系数、寄生电容等参数,还原漏感与谐振行为。本文以Wurth Elektronik的WE 744821201型号为例,从基本测试

weixin_27252001的博客 292

SSM + Shiro 整合 (5)- 自定义过滤器及权限解析器、介绍权限匹配流程

关于 Shiro 的权限匹配器和过滤器上一节,我们实现了自定义的 Realm,方式是继承 AuthorizingRealm 这个抽象类,分别实现认证的方法和授权的方法。这一节实现的代码的执行顺序 1、过滤器,在过滤器中执行 Subject 对象的判断是否具有某项权限的方法 isPermitted() 传入某一个跟当前登录对象相关的特征值(这里是登录对象正在访问的 url 连接) 2、程序到自定义

李威威的博客 1万+

QMT实盘避坑指南:从环境配置到策略部署的完整流程(含国金证券路径设置)

本文是一份详尽的QMT实盘交易避坑指南,重点解析了从环境配置到策略部署的完整流程。针对国金证券QMT平台,文章深入剖析了核心架构、精准路径配置、关键参数解析、交易操作实战及异常处理,并提供了策略部署、监控与日志构建的完整方案,旨在帮助具备Python基础的开发者规避常见陷阱,实现稳定可靠的实盘交易。

weixin_29309475的博客 590

Telegram 担保交易系统搭建指南:安全可靠的交易流程实现

本文介绍了基于Telegram Bot API搭建担保交易系统的完整方案。该系统通过第三方资金托管机制解决买卖双方信任问题,支持"付款后发货"和"收货后放款"的交易流程。文章详细阐述了系统架构设计,包括Telegram Bot交互层、后端业务逻辑层、数据库层和支付接口层。核心实现步骤涵盖:1)订单创建模块处理交易信息;2)支付处理模块集成Stripe Escrow实现资金托管;3)确认收货模块完成资金划转。系统采用PostgreSQL存储交易数据,并通过FastAPI

jingpide9527的博客 1945

java☞过滤器和拦截器的区别

过滤器和拦截器的区别,百度了一下: ①拦截器是基于java的反射机制的,而过滤器是基于函数回调。   ②拦截器不依赖与servlet容器,过滤器依赖与servlet容器。   ③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。   ④拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。   ⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容...

qq_1641486826的博客 304

044、Edge Impulse的音频分类实战

上周调试一块STM32WBA52开发板,板载PDM麦克风死活采不到有效数据。示波器怼上去,时钟线波形漂亮得像教科书,数据线却像心电图——全是毛刺。折腾半天发现是电源纹波干扰,给麦克风单独加了个LC滤波,世界清净了。这种坑,做音频分类的嵌入式工程师迟早要踩一遍。

2401_88858637的博客 54

[servlet]web.xml中url-pattern的四种配置方式及其优先级

一个servlet程序可以配置多个url-pattern. 不同的servlet不允许配置相同的url-pattern. 服务器启动的时候就会解析web.xml文件. url-pattern的配置方式有四种: 以下"aa"可以被任意字符代替 /aa 精确配置,拦截诸如以下形式的路径请求 http://IP地址:端口号/虚拟项目名/aa /aa/* 模糊配置,拦截以/aa/开头,后跟任意的...

朱同学的博客 1816

isaaclab无法识别NVIDIA显卡,如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!    📌 特别说明: 文中部分技术问题来源于真实生产环境及网络公开案例,均经过精挑细选与系统化整理,并结合多位一线资深架构师和工程师多年实战经验沉淀,提

**My Coding Family** 1144

RDKit | 基于Pytorch和RDKit建立QSAR模型

QSAR 定量构效方法(quantitative structure-activity relationship, QSAR)是应用最为广泛的药物设计方法。所谓定量构效方法就是通过一些数理统计方法建立其一系列化合物的生理活性或某种性质与其物理化学性质之间的定量关系,通过这些定量关系。可以预测化合物的生理活性或某些性质,指导我们设计出具有更高活性的化合物。 早在...

DrugOne 5077

shiro配置,及配置顺序从属关系

shiro配置 先配置过滤器 shiroFilter,因为是filter无特殊配置所有请求都要走这个 <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <property name="securityManager" ref="securityManager" /> <property name="loginUrl" value="${adminPa

weixin_43560924的博客 817

弱网、高热、只有 32MB 内存:恶劣环境下嵌入式 SoC 音视频开发的“不死”法则

永远不要假设。你申请一个 1920 宽的图像,硬件为了对齐(比如 16 字节对齐或 256 字节对齐),实际分配的一行可能有 1936 甚至是 2048 字节。那个多出来的部分叫Padding。如果你写代码时用来计算数据量,或者用Width来做指针偏移:恭喜你,你的画面会像被风吹歪的百叶窗一样,产生斜切畸变。永远使用VB_CONF结构体里返回的u32Stride字段。这是区分新手和老手的试金石。第六章 ISP 调优(Tuning)实战:为什么你调出的画面像个“鬼片”?

大模型大数据攻城狮的专栏 1768

web中的拦截器

拦截器 Filter过滤器 Filter过滤器它是JavaWeb的三大组件之一。三大组件分别是: Servlet 程序、Listener 监听器、Filter 过滤器 Filter过滤器它是JavaEE的规范。也就是接口 Filter过滤器它的作用是:拦截请求,过滤响应 Filter 的工作流程图 Filter 过滤器的使用 创建一个类实现Filter接口,实现接口方法 在doFilter方法中写功能需求 到 web.xml 中去配置 Filter 的拦截路径 创建拦截器 实现Filter接口 i

HUIEX的博客 2983

温度PID控制PLC程序

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

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

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

SpringMVC中整合Shiro自定义过滤器

SpringMVC中整合Shiro自定义过滤器 提示:这里可以添加本文要记录的大概内容: 一、 在项目pom中引入shiro依赖 <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.4.0</version>

weixin_45838130的博客 627

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

shiro与springMVC整合

此realm先不从数据库查询权限数据/***** 自定义Realm***/@Override}// 支持什么类型的token@Override}/**** 获取授权信息*///先自定义一个query权限,就不从数据库查询了= null) {//权限}}/**** 获取认证信息** 问题:如何在登录后不再进登录页面了呢???????????????????????????*/// 通过表单接收的用户名= null &&!if (user!

web13985085406的博客 1112

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

springMvc和shiro整合,shiro的realm不能自动注入的问题

springMvc和shiro整合,shiro的realm不能自动注入的问题 最近研究shiro,一开头就遇到了大困难,调试了3小时。 问题描述如下:shiro和spring mvc整合,shiro自定义了realm。 其中自定义的realm里面居然不能使用@Autowired注解标签注入相关的用户service。 百思不得其解,一项项跟踪,发现原来shiro 自定义realm的认证阶段属于

6688

SSM集成shiro 致使Controller无法自动注册service

由于shiro在web.xml中配置属于过滤器,其中在web.xml中的加载顺序为: <context-param>(上下文) > listener > filter > servlet>interceptor, 可见shiroFilter是早于SpringMVC的,所以Controller无法注册service,同时Realm中注册的service...

272

Shiro验证登录的springmvc框架的demo

1.先建一个实体UserInfo(由浅入深的顺序): public class UserInfo implements Serializable{ private Long userId; private String userName; private Integer userAge; private String userAddress; pr...

上善若泪 629

过滤器(Filter)与拦截器(Interceptor ) 区别

目录 什么是过滤器(Filter) 什么是拦截器(Interceptor) 拦截器(Interceptor)和过滤器(Filter)的区别 拦截器(Interceptor)和过滤器(Filter)的执行顺序 拦截器(Interceptor)使用 过滤器(Filter)使用 拦截器(Interceptor)和过滤器(Filter)的一些用途 demo 总结 参考资料 正文 过滤器(Filter) S...

m0_37174538的博客 352

SpringMVC+Shiro整合配置文件详解

版权声明:本文为博主原创文章,未经博主允许不得转载。   目录(?)[+]   在项目中xml文件的配置是必不可少的,特别是SpringMVC框架。但是几乎所有项目的配置都是大同小异,很多人都是直接复制黏贴了事,不少人对其具体含义及用途都不甚全知。本片文章将正对项目中常用的框架SpringMVC+Shiro进行整合,并对其中关键和部分常识性问题进行注释讲解,方便在以...

baobeituping的专栏 245

spring-springmvc-shiro整合(转载)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33862041的博客 110

java 高价值内容

Java Basic static关键字详解:https://blog.csdn.net/kuangay/article/details/81485324 static、final、static final的区别:https://www.cnblogs.com/EasonJim/p/7841990.html abstract抽象类的作用:https://baike.baidu.com/...

™red scarf的博客 165

jeesite登录至业务

转自https://blog.csdn.net/gaoduicai/article/details/79300464 业务场景是:登录时根据每个人电脑MAC地址做权限校验,因此研究了一下jeesite的登录业务 登录后跳操作理解 首先配置中jeesite.properties中设置: adminPath=/a :项目管理端域名 frontPath=/f :前端域名 <form i...

weixin_34067102的博客 123

【面试】阿里巴巴Java经典面试题整理及答案详解

Java开发工程师-面试题目集锦 Java的数据结构有哪些? 线性表,链表,栈,队列,图,树 什么是OOP? 面向对象编程 面向对象编程的原则有哪些? 单一职责原则:一个类中应该是一组相关性很高的函数、数据的封装! 开闭原则;对扩展开放,对修改关闭,即在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展。 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象。只...

小哲的博客 3837
上一篇: Shiro权限配置错误There is no filter with name 'anno' to apply to chain
下一篇: 利用账号密码模拟登录新浪微博
TYOUKAI_
博客等级 码龄9年 33粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值