SpringMVC过滤器Filter与拦截器Interceptor
Posted The Gao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC过滤器Filter与拦截器Interceptor相关的知识,希望对你有一定的参考价值。
过滤器
JavaWeb工程中的重要组成单元之一。通过构建一个继承Filter
接口的实体类,重写其中的init()
方法、doFilter()
方法、destroy()
方法实现。重写的三个方法中,doFilter()
方法是最重要的,它描述了拦截时的逻辑。
//实体类
public class TransactionFilter implements Filter
@Override
public void init(FilterConfig filterConfig) throws ServletException
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
try
filterChain.doFilter(servletRequest,servletResponse);
catch (Exception e)
throw new RuntimeException(e);
@Override
public void destroy()
需要将这个实体类配置到web.xml
中。
<!--配置-->
<filter>
<filter-name>TransactionFilter</filter-name>
<filter-class>com.gzh.filter.TransactionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TransactionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
拦截器
只有使用了SpringMVC框架的工程才能使用拦截器,因此拦截器就有了过滤器没有的特性。拦截器是基于Spring框架的AOP思想。
拦截器只会拦截访问的控制器方法, 如果访问的是静态资源是不会进行拦截的。
需要编写一个实体类继承HandlerInterceptor
接口。
public class MyInterceptor implements HandlerInterceptor
//在请求处理的方法之前执行
//返回true执行下一个拦截器,返回false就卡在当前拦截器
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception
System.out.println("处理前");
return true;
//在请求处理方法执行之后执行
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception
System.out.println("处理后");
//在dispatcherServlet处理后执行,做清理工作
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception
System.out.println("清理");
需要在SpringMVC的配置文件中配置拦截器。注意这里的/**
包括路径及其子路径,如/admin/*
拦截的是/admin/add
,/admin/add/user
不会被拦截;而/admin/**
拦截的是/admin/
下的所有文件。
<mvc:interceptors>
<!--可以配置多个拦截器-->
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.gzh.interceptor.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
以上是关于SpringMVC过滤器Filter与拦截器Interceptor的主要内容,如果未能解决你的问题,请参考以下文章
springboot下的Filter过滤器;springmvc的HandlerInterceptorAdapter拦截器