SpringMVC中的拦截器类似于Servlet中的过滤器Filter,用于对处理器(自己编写的Controller类)进行预处理和后处理。拦截器和过滤器一样也有拦截器链。
拦截器和过滤器的区别:
1,拦截器是SpringMVC框架中的,只支持在SpringMVC项目中使用,只会拦截请求的方法。
2,过滤器可以在任何web项目中使用,可以拦截任何资源,例如:servlet,控制器,jsp,html等等
我们想要实现拦截器必须实现HandlerInterceptor 接口
参考文档Spring Framework 中文文档 - 22. Web MVC 框架 | Docs4dev
applicationContext.xml
<mvc:interceptors>
<!-- <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>-->
<mvc:interceptor>
<!--用于执行指定拦截的路径-->
<mvc:mapping path="/**"/>
<!--不拦截的路径-->
<mvc:exclude-mapping path="/admin/**"/>
<bean id="permissionInterceptor" class="com.test.interceptors.PermissionInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
/*
* preHandle在执行处理器方法之前执行
* postHandle在执行处理器方法之后执行
* afterCompletion在这次请求完成后执行
* */
public class PermissionInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("执行了preHandle");
//返回true放行,返回false不放行
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("执行了postHandle");
HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("执行了afterCompletion");
HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
}
}