三种更改静态资源过滤方式

一、在web.xml中过滤

	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.eot</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.ttf</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.css</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.xml</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.swf</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.zip</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.gif</url-pattern>
	</servlet-mapping>

	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.jpg</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.png</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.js</url-pattern>
	</servlet-mapping>
	
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.html</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.woff</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>default</servlet-name>
		<url-pattern>*.txt</url-pattern>
	</servlet-mapping>
配置servlet-mapping,针对请求进行过滤和拦截。

拦截方式,针对请求,对后缀进行匹配。

*.js,*.css

以下部分为转载其他文章,帮助理解。

在Servlet容器中,只有servlet才能处理请求。比如在Tomcat容器中,即使是JSP,也会被编译成servlet,当访问静态资源,比如a.jpg的时候,也是由servlet来处理,在tomcat中,对于这种资源的处理servlet就是default,上面的这段配置,就是tomcat对静态资源的处理配置,该配置要写在DispatcherServlet的前面,让defaultServlet先于DispatcherServlet拦截生效。不同的servlet容器,处理静态资源的servlet的名字不太一样:Tomcat、Jetty、JBoss、GlassFish默认的servlet名字是default,WebLogic默认的servlet名字是FileServlet,WebSphere默认的servlet名字是SimpleFileServlet。

Tomcat, Jetty, JBoss, and GlassFish  默认 Servlet的名字 -- "default"
Google App Engine 默认 Servlet的名字 -- "_ah_default"
Resin 默认 Servlet的名字 -- "resin-file"
WebLogic 默认 Servlet的名字  -- "FileServlet"
WebSphere  默认 Servlet的名字 -- "SimpleFileServlet" 

转自: http://blog.csdn.net/u012246342/article/details/52350401

http://yedward.net/?id=350Spring MVC使用mvc:resources和mvc:default-servlet-handler标签来处理静态资源

http://blog.csdn.net/u012246342/article/details/52366514

http://blog.csdn.net/u012246342/article/details/52230456

2、在applicationContext.xml中进行配置。本篇文章不完善,补充文章地址为:

静态资源过滤方式补充

配置方式如下:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 过滤静态资源 -->  
  2.     <mvc:resources mapping="/js/**" location="/js/" />  
  3.     <mvc:resources mapping="/pages/assets/**" location="/pages/assets/" />  
  4.     <mvc:resources mapping="/pages/js/**" location="/pages/js/" />  
  5. <span style="white-space:pre">    </span>  
  6. <span style="white-space:pre">    </span>下面的配置也是必须配置,配置描述在,补充描述文章:http://blog.csdn.net/u012246342/article/details/52366514  
  7. <span style="white-space:pre">    </span><!-- 启用spring mvc 注解 -->  
  8. <span style="white-space:pre">    </span><mvc:annotation-driven/>    
  9. <span style="white-space:pre">    </span><!-- 配置默认servlet handler -->  
  10. <span style="white-space:pre">    </span><mvc:default-servlet-handler/>   

但是,配置 这个 标签 mvc:resources,需要在beans中:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <beans xmlns="http://www.springframework.org/schema/beans"  
  2.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xmlns:context="http://www.springframework.org/schema/context"  
  4.     xmlns:aop="http://www.springframework.org/schema/aop"  
  5.     xmlns:p="http://www.springframework.org/schema/p"  
  6.     xmlns:tx="http://www.springframework.org/schema/tx"  
  7.     xmlns:jdbc="http://www.springframework.org/schema/jdbc"  
  8.     xmlns:mvc="http://www.springframework.org/schema/mvc"    
  9.     xsi:schemaLocation="http://www.springframework.org/schema/beans    
  10.             http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    
  11.             http://www.springframework.org/schema/context    
  12.             http://www.springframework.org/schema/context/spring-context-3.0.xsd    
  13.             http://www.springframework.org/schema/tx  
  14.             http://www.springframework.org/schema/tx/spring-tx-3.0.xsd    
  15.             http://www.springframework.org/schema/jdbc    
  16.             http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd  
  17.             http://www.springframework.org/schema/mvc   
  18.             http://www.springframework.org/schema/mvc/spring-mvc.xsd  ">  

beans配置中,需要新增:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. xmlns:mvc="http://www.springframework.org/schema/mvc"    
在xsi:schemaLocation中,增加

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. http://www.springframework.org/schema/mvc   
  2. http://www.springframework.org/schema/mvc/spring-mvc.xsd   


关于beans配置,可以了解我写的另一篇文章:

http://blog.csdn.net/u012246342/article/details/52230456

增加对mvc标签的支持。


这个配置是对文件进行过滤,其实也是请求,拦截的是请求的路径。

从webapp/下

/pages/js/**    /js/**  /css/**等等。

3、自定义拦截器,对所有请求进行拦截,并根据配置实施过滤。

首先,在web.xml中,配置如下。

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <filter>  
  2.     <filter-name>securityFilter</filter-name>  
  3.     <filter-class>com.wswhr.filter.SecurityFilter</filter-class>  
  4.     <init-param>  
  5.         <param-name>ignores</param-name>  
  6.         <param-value>/perm/getCanalChargeUsers,/changePW,/app/appNavs,/app/download,/tulogin,/tulogout,/static,/login,/img/select,/tokenMethod,/deleteToken</param-value>  
  7.     </init-param>  
  8. </filter>  

关于init-param,看我转载的另一篇文章:里面对filter有更详细的描述,文章是完全转载。

http://blog.csdn.net/u012246342/article/details/52228642

增加过滤后,需要自己实现Filter。

代码如下:

[html]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. package com.wswhr.filter;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.HashSet;  
  5. import java.util.Set;  
  6.   
  7. import javax.servlet.Filter;  
  8. import javax.servlet.FilterChain;  
  9. import javax.servlet.FilterConfig;  
  10. import javax.servlet.ServletContext;  
  11. import javax.servlet.ServletException;  
  12. import javax.servlet.ServletRequest;  
  13. import javax.servlet.ServletResponse;  
  14. import javax.servlet.http.Cookie;  
  15. import javax.servlet.http.HttpServletRequest;  
  16. import javax.servlet.http.HttpServletResponse;  
  17.   
  18. import org.springframework.web.context.WebApplicationContext;  
  19.   
  20. import com.tujia.common.exception.UnAuthedException;  
  21. import com.tujia.core.security.SecurityUtil;  
  22.   
  23. public class SecurityFilter implements Filter {  
  24.   
  25.     private Set<String> prefixIignores = new HashSet<String>();  
  26.       
  27.     public void doFilter(ServletRequest req, ServletResponse res,  
  28.             FilterChain chain) throws IOException, ServletException {  
  29.         HttpServletRequest request = (HttpServletRequest) req;  
  30.         HttpServletResponse response = (HttpServletResponse) res;  
  31.   
  32.         if (canIgnore(request)) {  
  33.             chain.doFilter(req, res);  
  34.             return;  
  35.         }  
  36.           
  37.         try {  
  38.             //  
  39.             boolean validUser = loginOrNo(request, response);// 进行登录认证...  
  40.             if (!validUser) {//判断是否登录。否,跳转登录页面,  
  41.                 String cp = request.getContextPath();  
  42.                 response.sendRedirect(cp+"/tulogin");  
  43.                 return;  
  44.             }  
  45.             chain.doFilter(req, res);//已经登录  
  46.         } catch (UnAuthedException e) {  
  47.             e.printStackTrace();  
  48.         } finally {  
  49.             SecurityUtil.clearOnThreadOver();  
  50.         }  
  51.     }  
  52.   
  53.     public void init(FilterConfig config) throws ServletException {  
  54.   
  55.         ServletContext servletContext = config.getServletContext();  
  56.         WebApplicationContext ap = (WebApplicationContext) servletContext  
  57.                 .getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);  
  58.           
  59.         String cp = config.getServletContext().getContextPath();  
  60.         String ignoresParam = config.getInitParameter("ignores");  
  61.         String[] ignoreArray = ignoresParam.split(",");  
  62.         for (String s : ignoreArray) {  
  63.             prefixIignores.add(cp + s);  
  64.         }  
  65.     }  
  66.   
  67.     @Override  
  68.     public void destroy() {  
  69.         prefixIignores = null;  
  70.     }  
  71.   
  72.     private boolean canIgnore(HttpServletRequest request) {  
  73.         String url = request.getRequestURI();  
  74.         for (String ignore : prefixIignores) {  
  75.             if (url.startsWith(ignore)) {  
  76.                 return true;  
  77.             }  
  78.         }  
  79.         return false;  
  80.     }  
  81.       
  82. }  
代码很简单,我稍微说一下。

在init初始化方法中,获取所有的ignores 配置的参数。放到 Set集合中,在请求被拦截之后,取出请求的URL,与set中的所有请求进行匹配。

如果有相同,则不拦截。

如果不同,则验证用户是否登录,

如果没有登录,跳转登录页面,

如果已经登录,不拦截。


代码很简单,我稍微说一下。

在init初始化方法中,获取所有的ignores 配置的参数。放到 Set集合中,在请求被拦截之后,取出请求的URL,与set中的所有请求进行匹配。

如果有相同,则不拦截。

如果不同,则验证用户是否登录,

如果没有登录,跳转登录页面,

如果已经登录,不拦截。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java Web中,可以通过使用过滤器来设置静态资源的缓存。具体步骤如下: 1. 创建一个过滤器类,实现javax.servlet.Filter接口。在该类中,可以重写Filter接口的init()、doFilter()和destroy()方法。 2. 在doFilter()方法中,判断请求的资源是否为静态资源,如果是,则设置缓存。 3. 设置缓存的方法是通过设置响应头信息来实现的。在响应头中,可以设置Cache-Control、Expires和Last-Modified等属性,具体含义如下: - Cache-Control:设置缓存的控制策略,可以设置为max-age=n(缓存时间)或no-cache(不缓存)等。 - Expires:设置缓存的过期时间,可以设置为一个具体的日期时间,如“Sat, 01 Jan 2022 00:00:00 GMT”。 - Last-Modified:设置资源的最后修改时间,可以设置为一个具体的日期时间,如“Thu, 01 Jan 1970 00:00:00 GMT”。 例如,设置缓存时间为1小时,可以使用如下代码: ``` response.setHeader("Cache-Control", "max-age=" + 60 * 60); response.setDateHeader("Expires", System.currentTimeMillis() + 60 * 60 * 1000); ``` 4. 在web.xml文件中配置过滤器,并指定需要拦截的资源。 ``` <filter> <filter-name>CacheFilter</filter-name> <filter-class>com.example.CacheFilter</filter-class> </filter> <filter-mapping> <filter-name>CacheFilter</filter-name> <url-pattern>*.css</url-pattern> <url-pattern>*.js</url-pattern> <url-pattern>*.jpg</url-pattern> <url-pattern>*.png</url-pattern> </filter-mapping> ``` 通过以上步骤,就可以使用过滤器来设置静态资源的缓存了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值