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

一、在web.xml中过滤

	
		default
		*.eot
	
	
		default
		*.ttf
	
	
		default
		*.css
	
	
		default
		*.xml
	
	
		default
		*.swf
	
	
		default
		*.zip
	
	
		default
		*.gif
	

	
		default
		*.jpg
	
	
		default
		*.png
	
	
		default
		*.js
	
	
	
		default
		*.html
	
	
		default
		*.woff
	
	
		default
		*.txt
	
配置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
 
  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>  
  8. <span style="white-space:pre">    span><mvc:annotation-driven/>    
  9. <span style="white-space:pre">    span>  
  10. <span style="white-space:pre">    span><mvc:default-servlet-handler/>   

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

[html]  view plain  copy
 
  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
 
  1. xmlns:mvc="http://www.springframework.org/schema/mvc"    
在xsi:schemaLocation中,增加

[html]  view plain  copy
 
  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
 
  1. <filter>  
  2.     <filter-name>securityFilterfilter-name>  
  3.     <filter-class>com.wswhr.filter.SecurityFilterfilter-class>  
  4.     <init-param>  
  5.         <param-name>ignoresparam-name>  
  6.         <param-value>/perm/getCanalChargeUsers,/changePW,/app/appNavs,/app/download,/tulogin,/tulogout,/static,/login,/img/select,/tokenMethod,/deleteTokenparam-value>  
  7.     init-param>  
  8. filter>  

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

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

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

代码如下:

[html]  view plain  copy
 
  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中的所有请求进行匹配。

如果有相同,则不拦截。

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

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

如果已经登录,不拦截。



你可能感兴趣的:(SpringMVC)