SpringMVC提供<mvc:resources>来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下方案进行解决:

方案一、拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml)

  1. 1 <mvc:resources location="/" mapping="/**/*.js"/>
  2. 2 <mvc:resources location="/" mapping="/**/*.css"/>
  3. 3 <mvc:resources location="/assets/" mapping="/assets/**/*"/>
  4. 4 <mvc:resources location="/images/" mapping="/images/*" cache-period="360000"/>
  5. 5
  6. 6 <mvc:interceptors>
  7. 7 <mvc:interceptor>
  8. 8 <mvc:mapping path="/**/*"/>
  9. 9 <mvc:exclude-mapping path="/**/fonts/*"/>
  10. 10 <mvc:exclude-mapping path="/**/*.css"/>
  11. 11 <mvc:exclude-mapping path="/**/*.js"/>
  12. 12 <mvc:exclude-mapping path="/**/*.png"/>
  13. 13 <mvc:exclude-mapping path="/**/*.gif"/>
  14. 14 <mvc:exclude-mapping path="/**/*.jpg"/>
  15. 15 <mvc:exclude-mapping path="/**/*.jpeg"/>
  16. 16 <mvc:exclude-mapping path="/**/*login*"/>
  17. 17 <mvc:exclude-mapping path="/**/*Login*"/>
  18. 18 <bean class="com.luwei.console.mg.interceptor.VisitInterceptor"></bean>
  19. 19 </mvc:interceptor>
  20. 20 </mvc:interceptors>

方案二、使用默认的静态资源处理Servlet处理静态资源(涉及spring-mvc.xml, web.xml)

在spring-mvc.xml中启用默认Servlet

  1. 1 <mvc:default-servlet-handler/>

在web.xml中增加对静态资源的处理

  1. 1 <servlet-mapping>
  2. 2 <servlet-name>default</servlet-name>
  3. 3 <url-pattern>*.js</url-pattern>
  4. 4 <url-pattern>*.css</url-pattern>
  5. 5 <url-pattern>/assets/*"</url-pattern>
  6. 6 <url-pattern>/images/*</url-pattern>
  7. 7 </servlet-mapping>

但是当前的设置必须在Spring的Dispatcher的前面

方案三、修改Spring的全局拦截设置为*.do的拦截(涉及web.xml)

  1. 1 <servlet>
  2. 2 <servlet-name>SpringMVC</servlet-name>
  3. 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  4. 4 <init-param>
  5. 5 <param-name>contextConfigLocation</param-name>
  6. 6 <param-value>classpath:spring-mvc.xml</param-value>
  7. 7 </init-param>
  8. 8 <load-on-startup>1</load-on-startup>
  9. 9 <async-supported>true</async-supported>
  10. 10 </servlet>
  11. 11 <servlet-mapping>
  12. 12 <servlet-name>SpringMVC</servlet-name>
  13. 13 <url-pattern>*.action</url-pattern>
  14. 14 </servlet-mapping>

这样设置,Spring就会只针对以'.do'结尾的请求进行处理,不再维护静态资源

针对这三种方案的优劣分析:

  第一种方案配置比较臃肿,多个拦截器时增加文件行数,不推荐使用;

  第二种方案使用默认的Servlet进行资源文件的访问,Spring拦截所有请求,然后再将资源文件交由默认的Sevlet进行处理,性能上少有损耗;

  第三种方案Spring只是处理以'.action'结尾的访问,性能上更加高效,但是再访问路径上必须都以'.action'结尾,URL不太文雅;

综上所述,推荐使用第二和第三种方案


在SpringMVC3.0之后推荐使用: 

  1. <mvc:resources location="/WEB-INF/html/" mapping="/**/*.html"/>
    <mvc:resources location="/WEB-INF/html/" mapping="/**/*.ico"/>
    <mvc:resources location="/WEB-INF/html/" mapping="/**/*.js"/>
    <mvc:resources location="/WEB-INF/html/" mapping="/**/*.css"/>
    <mvc:resources location="/WEB-INF/html/" mapping="/**/*.png"/>
    <mvc:resources location="/WEB-INF/html/" mapping="/**/*.gif"/>
    <mvc:resources location="/WEB-INF/html/" mapping="/**/*.jpg"/>
    <mvc:resources location="/WEB-INF/html/" mapping="/**/*.ttf"/>
    <mvc:resources location="/WEB-INF/html/" mapping="/**/*.woff"/>
    <mvc:resources location="/WEB-INF/html/" mapping="/**/*.woff2"/>

防止SpringMVC拦截器拦截js等静态资源文件的更多相关文章

  1. 在JSP中常见问题,防止SpringMVC拦截器拦截js等静态资源文件的解决方案

    方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/* ...

  2. springMvc中实现拦截器Interceptor以及添加静态资源映射

    这个代码写了很久了,多久呢?2018年12-20号写的.... 废话不多说,简化一下,作为笔记. 注: public class springmvcConfig extends WebMvcConfi ...

  3. NodeJS + express访问html、css、JS等静态资源文件

    原先做前端开发时都是用XAMPP或LAMP,把HTML.CSS.JS等前端资源放到htdocs下,测试自己的前端代码,但有些不方便的地方是,在调用Ajax请求后无法模拟请求返回的数据,最近学了点Nod ...

  4. 解决Tomcat无法加载css和js等静态资源文件

    解决思路有两个 一是,你使用了Apache服务器,html不交给Tomcat处理,所以你找不到Html等静态资源,所以你先停掉阿帕奇,然后只用Tomcat猫试试. 二是,像我一样,使用了Jetty开发 ...

  5. 解决springboot 配置文件未映射静态资源文件 导致shiro拦截静态资源的问题

    ---------------------------------------------------------------------------------------------------- ...

  6. Struts2 拦截器—拦截action

    对于拦截器的基本使用这里我就懒得打字了,我这里就讲下如何用 Struts2 拦截器 拦截action.这是我个人的想法,如果有什么不对的,或者你们有什么更好的方法.请多多留言! 拦截器的默认拦截的方法 ...

  7. Springboot前后端分离中,后端拦截器拦截后,前端没有对应的返回码可以判断

    项目登录流程如下 用户进入前端登录界面,输入账号密码等,输入完成之后前端发送请求到后端(拦截器不会拦截登录请求),后端验证账号密码等成功之后生成Token并存储到数据库,数据库中包含该Token过期时 ...

  8. Springboot通过拦截器拦截请求信息收集到日志

    1.需求 最近在工作中遇到的一个需求,将请求中的客户端类型.操作系统类型.ip.port.请求方式.URI以及请求参数值收集到日志中,网上找资料说用拦截器拦截所有请求然后收集信息,于是就开始了操作: ...

  9. Spring MVC程序中怎么得到静态资源文件css,js,图片文件的路径问题

    问题描述 在用springmvc开发应用程序的时候.对于像我一样的初学者,而且还是自学的人,有一个很头疼的问题.那就是数据都已经查出来了,但是页面的样式仍然十分简陋,加载不了css.js,图片等资源文 ...

随机推荐

  1. 【转】cookielib模块

    cookielib模块 cookielib模块的主要作用是提供可存储cookie的对象,以便于与urllib2模块配合使用来访问Internet资源.例如可以利用本模块 的CookieJar类的对象来 ...

  2. Web标准的简单理解 不同内核浏览器的差异以及浏览器渲染简介(转)

    Web标准是一系列标准的集合.这些标准大概分三方面:结构.表现和行为.结构化主要有HTML, XHTML和XML,表现主要有CSS,行为标准主要包括对象模型,如 W3C DOM.ECMAScript等 ...

  3. 解决-Django使用filter过滤时间,无法获取月份的问题

    django中的filter日期查询属性有:year.month.day.week_day.hour.minute.second 但是但我在使用过滤查询是却总是无法过滤出月份,各种查资料,最后才发现是 ...

  4. contenteditable 插入及粘贴纯文本内容

    本文主要介绍 div 标签设置  contenteditable = ' true ' 时,在光标位置插入输入的内容,或在光标位置粘贴纯文本内容.文中涉及知识,可参考以下: http://www.zh ...

  5. Redis实现分布式锁的正确姿势

    分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介绍Re ...

  6. SpringMVC 自定义类型转换器

    先准备一个JavaBean(Employee) 一个Handler(SpringMVCTest) 一个converters(EmployeeConverter) 要实现的输入一个字符串转换成一个emp ...

  7. 使用Remix编译和部署以太坊智能合约

      Remix 是一個开源的 Solidity 智能合约开发环境,提供基本的编译.部署至本地或测试网络.执行合约等功能.Solidity 是 以太坊Ethereum 官方设计和支持的开发语言,专门用于 ...

  8. 机器学习技法:04 Soft-Margin Support Vector Machine

    Roadmap Motivation and Primal Problem Dual Problem Messages behind Soft-Margin SVM Model Selection S ...

  9. 对于IO流的个人理解

    Samuel 2018-04-21 在这之前,我给你们构造这样一个生活用水的场景: 人们日常生活需要生活用水,那么,水从哪里来呢? 大家都学过初中的物理常识,水在地表,通过蒸发,变成水蒸气去到空中,在 ...

  10. [AHOI 2012]树屋阶梯

    Description 暑假期间,小龙报名了一个模拟野外生存作战训练班来锻炼体魄,训练的第一个晚上,教官就给他们出了个难题.由于地上露营湿气重,必须选择在高处的树屋露营.小龙分配的树屋建立在一颗高度为 ...