一、在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.youkuaiyun.com/u012246342/article/details/52350401
http://yedward.net/?id=350Spring MVC使用mvc:resources和mvc:default-servlet-handler标签来处理静态资源
http://blog.youkuaiyun.com/u012246342/article/details/52366514
http://blog.youkuaiyun.com/u012246342/article/details/52230456
2、在applicationContext.xml中进行配置。本篇文章不完善,补充文章地址为:
静态资源过滤方式补充
配置方式如下:
-
- <mvc:resources mapping="/js/**" location="/js/" />
- <mvc:resources mapping="/pages/assets/**" location="/pages/assets/" />
- <mvc:resources mapping="/pages/js/**" location="/pages/js/" />
- <span style="white-space:pre"> </span>
- <span style="white-space:pre"> </span>下面的配置也是必须配置,配置描述在,补充描述文章:http://blog.youkuaiyun.com/u012246342/article/details/52366514
- <span style="white-space:pre"> </span>
- <span style="white-space:pre"> </span><mvc:annotation-driven/>
- <span style="white-space:pre"> </span>
- <span style="white-space:pre"> </span><mvc:default-servlet-handler/>
但是,配置 这个 标签 mvc:resources,需要在beans中:
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:p="http://www.springframework.org/schema/p"
- xmlns:tx="http://www.springframework.org/schema/tx"
- xmlns:jdbc="http://www.springframework.org/schema/jdbc"
- xmlns:mvc="http://www.springframework.org/schema/mvc"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://www.springframework.org/schema/tx
- http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
- http://www.springframework.org/schema/jdbc
- http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc.xsd ">
beans配置中,需要新增:
- xmlns:mvc="http://www.springframework.org/schema/mvc"
在xsi:schemaLocation中,增加
- http://www.springframework.org/schema/mvc
- http://www.springframework.org/schema/mvc/spring-mvc.xsd
关于beans配置,可以了解我写的另一篇文章:
http://blog.youkuaiyun.com/u012246342/article/details/52230456
增加对mvc标签的支持。
这个配置是对文件进行过滤,其实也是请求,拦截的是请求的路径。
从webapp/下
/pages/js/** /js/** /css/**等等。
3、自定义拦截器,对所有请求进行拦截,并根据配置实施过滤。
首先,在web.xml中,配置如下。
- <filter>
- <filter-name>securityFilter</filter-name>
- <filter-class>com.wswhr.filter.SecurityFilter</filter-class>
- <init-param>
- <param-name>ignores</param-name>
- <param-value>/perm/getCanalChargeUsers,/changePW,/app/appNavs,/app/download,/tulogin,/tulogout,/static,/login,/img/select,/tokenMethod,/deleteToken</param-value>
- </init-param>
- </filter>
关于init-param,看我转载的另一篇文章:里面对filter有更详细的描述,文章是完全转载。
http://blog.youkuaiyun.com/u012246342/article/details/52228642
增加过滤后,需要自己实现Filter。
代码如下:
- package com.wswhr.filter;
-
- import java.io.IOException;
- import java.util.HashSet;
- import java.util.Set;
-
- import javax.servlet.Filter;
- import javax.servlet.FilterChain;
- import javax.servlet.FilterConfig;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import javax.servlet.ServletRequest;
- import javax.servlet.ServletResponse;
- import javax.servlet.http.Cookie;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
-
- import org.springframework.web.context.WebApplicationContext;
-
- import com.tujia.common.exception.UnAuthedException;
- import com.tujia.core.security.SecurityUtil;
-
- public class SecurityFilter implements Filter {
-
- private Set<String> prefixIignores = new HashSet<String>();
-
- public void doFilter(ServletRequest req, ServletResponse res,
- FilterChain chain) throws IOException, ServletException {
- HttpServletRequest request = (HttpServletRequest) req;
- HttpServletResponse response = (HttpServletResponse) res;
-
- if (canIgnore(request)) {
- chain.doFilter(req, res);
- return;
- }
-
- try {
- //
- boolean validUser = loginOrNo(request, response);// 进行登录认证...
- if (!validUser) {//判断是否登录。否,跳转登录页面,
- String cp = request.getContextPath();
- response.sendRedirect(cp+"/tulogin");
- return;
- }
- chain.doFilter(req, res);//已经登录
- } catch (UnAuthedException e) {
- e.printStackTrace();
- } finally {
- SecurityUtil.clearOnThreadOver();
- }
- }
-
- public void init(FilterConfig config) throws ServletException {
-
- ServletContext servletContext = config.getServletContext();
- WebApplicationContext ap = (WebApplicationContext) servletContext
- .getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
-
- String cp = config.getServletContext().getContextPath();
- String ignoresParam = config.getInitParameter("ignores");
- String[] ignoreArray = ignoresParam.split(",");
- for (String s : ignoreArray) {
- prefixIignores.add(cp + s);
- }
- }
-
- @Override
- public void destroy() {
- prefixIignores = null;
- }
-
- private boolean canIgnore(HttpServletRequest request) {
- String url = request.getRequestURI();
- for (String ignore : prefixIignores) {
- if (url.startsWith(ignore)) {
- return true;
- }
- }
- return false;
- }
-
- }
代码很简单,我稍微说一下。
在init初始化方法中,获取所有的ignores 配置的参数。放到 Set集合中,在请求被拦截之后,取出请求的URL,与set中的所有请求进行匹配。
如果有相同,则不拦截。
如果不同,则验证用户是否登录,
如果没有登录,跳转登录页面,
如果已经登录,不拦截。
代码很简单,我稍微说一下。
在init初始化方法中,获取所有的ignores 配置的参数。放到 Set集合中,在请求被拦截之后,取出请求的URL,与set中的所有请求进行匹配。
如果有相同,则不拦截。
如果不同,则验证用户是否登录,
如果没有登录,跳转登录页面,
如果已经登录,不拦截。