详解springmvc拦截器拦截静态资源
发布时间 - 2026-01-10 22:40:59 点击率:次springmvc拦截器interceptors

springmvc拦截器能够对请求的资源路径进行拦截,极大的简化了拦截器的书写。但是,千万千万要注意一点:静态资源的放行。
上代码:
<mvc:resources mapping="/resources/**" location="/static/resources" /> <mvc:resources mapping="/static/css/**" location="/static/css/" /> <mvc:resources mapping="/static/images/**" location="/static/images/" /> <mvc:resources mapping="/static/js/**" location="/static/js/" />
<mvc:interceptors>
<!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求
<bean class="com.myTree.interceptor.LoginInterceptor" />-->
<mvc:interceptor>
<mvc:mapping path="/**" />
<!-- 需排除拦截的地址 -->
<mvc:exclude-mapping path="/Login"/>
<mvc:exclude-mapping path="/login"/>
<mvc:exclude-mapping path="/sattic/**"/>
<!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 -->
<beans:bean class="com.myTree.interceptor.LoginInterceptor" >
</beans:bean>
</mvc:interceptor>
</mvc:interceptors>
问题来了,在请求jsp页面的时候,你的静态资源的访问仍然会被自定义拦截器拦截,这会导致程序运行的效率大大下降,还会不停的跳转到拦截器的逻辑。主要原因是
<mvc:mapping path="/**" />
会对所有的请求资源进行拦截,虽然静态资源已经排除了,但还是会被拦截到。
如何解决这个bug呢?
主要有三种方式:
1、修改请求的url地址。
如果请求的url地址都是以*.do结尾,那么拦截器中的配置可以变为拦截以do结尾的资源,静态资源自然就不会被拦截到了;
2、在自定义拦截器中对资源进行判断,如果满足需要排除的资源,就进行放行。
<!-- 拦截器配置 -->
<mvc:interceptors>
<!-- session超时 -->
<mvc:interceptor>
<mvc:mapping path="/*/*"/>
<bean class="com.myTree.interceptor.LoginInterceptor">
<property name="allowUrls">
<list>
<!-- 如果请求中包含以下路径,则不进行拦截 -->
<value>/login</value>
<value>/js</value>
<value>/css</value>
<value>/image</value>
<value>/images</value>
</list>
</property>
</bean>
</mvc:interceptor>
</mvc:interceptors>
在拦截器中设定不拦截的属性:
/**
* 处理登录拦截器
*/
public class LoginInterceptor implements HandlerInterceptor{
public String[] allowUrls;//还没发现可以直接配置不拦截的资源,所以在代码里面来排除
public void setAllowUrls(String[] allowUrls) {
this.allowUrls = allowUrls;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {<pre name="code" class="java"> <span style="white-space:pre"> </span>String requestUrl = request.getRequestURI().replace(request.getContextPath(), "");
System.out.println(requestUrl);
if(null != allowUrls && allowUrls.length>=1){
for(String url : allowUrls) {
if(requestUrl.contains(url)) {
return true;
}
}
}
3、设置web.xml中的默认拦截器,不拦截静态资源
在springmvc的Dispatcher中配置<mvc:default-servlet-handler />(一般Web应用服务器默认的Servlet名称是"default",所以这里我们激活Tomcat的defaultServlet来处理静态文件,在web.xml里配置如下代码即可:)
<!--该servlet为tomcat,jetty等容器提供,将静态资源映射从/改为/static/目录,如原来访问http://localhost/foo.css,现在http://localhost/static/foo.css --> <!-- 不拦截静态文件 --> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>/js/*</url-pattern> <url-pattern>/css/*</url-pattern> <url-pattern>/images/*</url-pattern> <url-pattern>/fonts/*</url-pattern> </servlet-mapping>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# spring拦截静态资源
# spring拦截器静态资源
# 解决springMVC 跳转js css图片等静态资源无法加载的问题
# 防止SpringMVC拦截器拦截js等静态资源文件的解决方法
# SpringMVC访问静态资源的三种方式小结
# SpringMVC访问静态资源的方法
# 详解SpringMVC中设置静态资源不被拦截的问题
# SpringMVC 拦截器不拦截静态资源的三种处理方式方法
# SpringMVC中处理静态资源的过程详解
# 拦截器
# 自定义
# 器中
# 来了
# 还没
# 还会
# 要注意
# 会对
# 可以直接
# 主要原因
# 中对
# 如何解决
# 这会
# 大家多多
# 跳转到
# 主要有三种
# 简化了
# list
# jsp
# login
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何快速搭建高效简练网站?
Python文件操作最佳实践_稳定性说明【指导】
iOS UIView常见属性方法小结
音乐网站服务器如何优化API响应速度?
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
Laravel如何使用Livewire构建动态组件?(入门代码)
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Laravel如何实现一对一模型关联?(Eloquent示例)
中国移动官方网站首页入口 中国移动官网网页登录
Laravel Docker环境搭建教程_Laravel Sail使用指南
制作企业网站建设方案,怎样建设一个公司网站?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
如何在橙子建站上传落地页?操作指南详解
西安专业网站制作公司有哪些,陕西省建行官方网站?
清除minerd进程的简单方法
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
手机网站制作与建设方案,手机网站如何建设?
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
EditPlus中的正则表达式 实战(2)
高性能网站服务器部署指南:稳定运行与安全配置优化方案
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何在云虚拟主机上快速搭建个人网站?
Laravel Livewire是什么_使用Laravel Livewire构建动态前端界面
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
Linux系统命令中tree命令详解
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
Laravel如何实现事件和监听器?(Event & Listener实战)
如何快速生成高效建站系统源代码?
微信小程序 配置文件详细介绍
Laravel如何编写单元测试和功能测试?(PHPUnit示例)
Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
iOS发送验证码倒计时应用
动图在线制作网站有哪些,滑动动图图集怎么做?
北京企业网站设计制作公司,北京铁路集团官方网站?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
如何用狗爹虚拟主机快速搭建网站?
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
微信小程序 五星评分(包括半颗星评分)实例代码
上一篇:使用Yii框架开发API
上一篇:使用Yii框架开发API

