web服务器和shiro哪个先调?web服务器与shiro执行顺序详解

Web服务器永远先于Shiro接管请求。 浏览器发出的HTTP请求先到Tomcat或Jetty容器,容器完成Socket读取和HTTP解析后,才会把请求交给ShiroFilter,Shiro只是挂在过滤器链上的一道关卡,没有容器启动,它根本收不到请求。

web服务器和shiro哪个先调用?从一次登录请求说起

很多人把“先于Controller执行”和“先于Web服务器执行”搞混,Shiro过滤器确实挡在Controller前面,但它在Servlet容器内部运行,容器不先启动,Shiro Filter不会初始化,容器启动时会读取web.xml或Spring Boot的FilterRegistrationBean,把ShiroFilter注册到过滤链,请求到达时,容器先分配线程、解析HTTP报文,然后按顺序执行过滤链。

spring boot集成shiro登录流程中谁先跑

在Spring Boot项目里,内嵌Tomcat先监听8080端口,一个POST /login请求进来后,Tomcat的Connector线程接收字节流,经过CoyoteAdapter解析成HttpServletRequest,接着进入应用的FilterChain,Shiro的ShiroFilterFactoryBean生成的过滤器在这里被调用,最后才到DispatcherServlet,再进到你的登录Controller。

可以理解为三层顺序:

  • 第一层:Tomcat网络层接收请求
  • 第二层:ShiroFilter过滤链执行认证授权逻辑
  • 第三层:Spring MVC的Controller处理业务

shiro过滤器在tomcat中的执行顺序实测

想自己验证,不需要复杂工具,在ShiroFilter里打一条日志,再在Controller里打一条日志,启动应用后调用登录接口,控制台会先打印ShiroFilter的进入日志,后打印Controller进入日志,但这两条都在Tomcat的访问日志之后,Tomcat的access log通常记录请求完成时间,可以在logs目录下看到localhost_access_log文件,里面有请求进入的原始记录,对比时间戳就能确认容器先收到请求。

web服务器和shiro哪个先调?web服务器与shiro执行顺序详解

为什么Shiro只能当第二道门

Shiro不是独立服务,它没有监听端口的能力,它的核心是一组过滤器,通过ShiroFilterFactoryBean或web.xml里的DelegatingFilterProxy挂到Servlet容器,容器负责网络IO、请求解析、会话管理的基础部分,Shiro负责认证、授权、密码校验,这个分工决定了调用顺序不会颠倒。

从部署形态看先后关系

  • 如果前面还有Nginx,则Nginx先接收TCP连接,转发给Tomcat,Tomcat再交给Shiro。
  • 如果直接暴露Tomcat,则Tomcat的Connector先读字节流。
  • 无论哪种部署,Shiro都只能在Servlet容器内部活动。

Servlet Filter机制决定了先后

Servlet规范里,FilterChain由容器创建和管理,Tomcat在调用应用初始化方法时,把过滤链按顺序组装好,ShiroFilter只是其中一个节点,容器没启动,过滤链不存在,容器启动后,过滤链才有执行机会,所以Shiro永远不可能先于Web服务器。

java web安全框架对比:shiro和spring security调用时机差异

两个框架在调用顺序上没有本质区别,Spring Security的DelegatingFilterProxy和Shiro的ShiroFilter都运行在容器过滤链中,它们都晚于Web服务器,真正的区别在过滤链内部:Spring Security默认有多个过滤器组成SecurityFilterChain,Shiro则通常用一个大的ShiroFilter或几个自定义过滤器,国内较老项目里Shiro出现频率较高,因为配置简单、学习成本低,新项目用Spring Security的比例在上升。

web服务器和shiro哪个先调?web服务器与shiro执行顺序详解

| 对比项 | Apache Shiro | Spring Security |
| 调用入口 | ShiroFilter | DelegatingFilterProxy |
| 是否先于Web服务器 | 否 | 否 |
| 授权费用 | 免费开源 | 免费开源 |
| 国内项目使用情况 | 老项目较多 | 新项目较多 |

行业共识认为,Shiro适合权限模型简单的中小型项目,Spring Security适合与Spring生态深度集成的复杂系统,二者都不需要付费授权,主要成本在学习和维护。

为什么总有人误以为Shiro先拦截

因为ShiroFilter通常配置为过滤链的第一个过滤器,拦截所有路径,开发者在Controller里打印日志时,总看到Shiro先执行,于是产生“Shiro先调”的错觉,实际上它只是先于业务代码,不是先于Web服务器。

自己动手验证调用顺序的实操步骤

创建自定义过滤器观察调用顺序

新建一个类实现javax.servlet.Filter,在doFilter方法里打印“CustomFilter进入”,然后调用chain.doFilter,这样你能在控制台看到过滤链的执行顺序。

设置过滤器顺序

用FilterRegistrationBean注册自定义过滤器,setOrder设置为0,ShiroFilter的order可以设置为1,这样自定义过滤器会先于Shiro执行,但无论order怎么调,它们都在Tomcat之后。

观察最终日志输出

启动应用,访问任意接口,控制台顺序大致如下:

  • Tomcat访问日志记录请求
  • CustomFilter进入
  • ShiroFilter进入
  • web服务器和shiro哪个先调?web服务器与shiro执行顺序详解

    Controller进入

这能直观看到Tomcat最先,如果你把Tomcat访问日志关闭,只留应用日志,也能通过ShiroFilter里的request.getRemoteAddr()获取到客户端地址,说明Tomcat已经解析过HTTP报文。

回到最初的问题:web服务器和shiro哪个先调用,答案固定且没有例外,Web服务器先调,Shiro后调,只要应用跑在Servlet容器里,这个顺序就不会变,理解这一点能帮助开发者正确排查过滤链顺序和登录流程问题。

Q&A:web服务器和shiro哪个先调用相关疑问

web服务器和shiro哪个先调用,会影响登录接口性能吗?

会影响一点,每次请求都要多过一层Shiro过滤器链,做路径匹配和权限判断,但这个开销多数情况下很小,相比数据库查询和密码哈希计算,过滤器的耗时基本可以忽略,真正影响性能的是Shiro配置不当,比如每次请求都查数据库加载权限。

shiro过滤器在tomcat中的执行顺序可以调整吗?

可以,通过FilterRegistrationBean的setOrder方法能调整ShiroFilter与自定义Filter的相对顺序,你甚至可以把自定义过滤器放在Shiro之前,但无论order怎么设置,ShiroFilter始终在Tomcat的请求解析之后,它不可能跑到容器前面去。

国内Java项目用Shiro还是Spring Security多?

老项目用Shiro的较多,新项目用Spring Security的比例在增加,Apache Shiro免费开源,学习曲线平缓,国内很多中小型项目还在用它,Spring Security功能更强,但配置复杂,选哪个主要看团队熟悉度和权限需求,与地域没有强关联。

图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/799354.html

(0)
上一篇 2026年9月9日 17:02
下一篇 2026年9月9日 17:04

相关推荐

  • 网站制作和app开发,app开发费用大概多少

    2026年企业数字化首选方案需根据业务形态决定:重品牌展示与SEO流量获取选网站制作,重用户留存与高频交互选app开发,两者结合且以小程序为轻量级补充是当前最优解,核心决策:网站与app的底层逻辑差异在2026年的数字营销环境中,单纯的技术选型已不再是唯一标准,而是基于“获客成本”与“用户生命周期”的综合考量……

    2026年5月28日
    01382
  • phpcms二次开发教程怎么学?,phpcms二次开发难吗?

    phpcms二次开发教程的核心在于掌握其MVC分层架构与标签调用逻辑,结合2026年PHP8.2环境,可为企业网站快速构建高安全、高扩展的定制化内容管理系统,环境搭建与版本选择2026年推荐开发环境PHP版本:官方已停止维护7.x,强制使用PHP 8.2+,配合JIT编译器可提升二次开发执行效率30%以上,数据……

    2026年7月19日
    0842
    • 服务器间歇性无响应是什么原因?如何排查解决?

      根源分析、排查逻辑与解决方案服务器间歇性无响应是IT运维中常见的复杂问题,指服务器在特定场景下(如高并发时段、特定操作触发时)出现短暂无响应、延迟或服务中断,而非持续性的宕机,这类问题对业务连续性、用户体验和系统稳定性构成直接威胁,需结合多维度因素深入排查与解决,常见原因分析:从硬件到软件的多维溯源服务器间歇性……

      2026年1月10日
      020
  • 贵阳微信二次开发,如何实现个性化功能定制,提升用户体验?

    提升企业营销效率的新途径随着移动互联网的普及,微信已成为我国最受欢迎的社交平台之一,企业纷纷借助微信的力量,开展营销活动,提升品牌知名度,传统的微信营销方式已无法满足企业日益增长的需求,贵阳微信二次开发应运而生,为企业提供了一种全新的营销解决方案,贵阳微信二次开发的优势定制化开发贵阳微信二次开发可以根据企业的需……

    2025年11月10日
    02420
  • 网站知识库开发怎么做?企业知识库搭建方案

    构建高效、安全且可扩展的网站知识库是企业数字化转型的核心环节,其成功的关键在于架构设计的合理性与底层云资源的弹性支撑,一个优秀的知识库系统不仅能沉淀企业资产,更能通过智能检索与权限管控,将信息转化为生产力,直接降低运维成本并提升用户满意度,核心架构:从“存储堆砌”到“智能中枢”的跨越传统知识库往往沦为文件的简单……

    2026年4月30日
    01772

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(1条)

  • bravesmart74的头像
    bravesmart74 2026年9月9日 17:07

    这篇文章的内容非常有价值,我从中学习到了很多新的知识和观点。作者的写作风格简洁明了,却又不失深度,让人读起来很舒服。特别是服务器和部分,给了我很多新的思路。感谢分享这么好的内容!