拦截器
在Servlet阶段接触过 过滤器 ,它和拦截器作用是一样的,但是底层不一样
- 拦截器: Interceptor ,它是Spring框架的一部分,天然运行在IOC容器中,底层是基于
代理模式
,也是AOP的一个具体实现 - 过滤器: 是j2ee的标准,由不同的第三方容器厂商实现的,过滤器属于容器,基于
函数回调机制
拦截器配置
<!-- 拦截器配置 -->
<mvc:interceptors>
<!-- 配置单个拦截器的作用 -->
<mvc:interceptor>
<!-- 拦截的路径 -->
<mvc:mapping path="/**"/>
<!-- 在拦截的基础上排除的路径 -->
<mvc:exclude-mapping path="/**.ico"/>
<mvc:exclude-mapping path="/static/**"/>
<mvc:exclude-mapping path="/"/>
<!-- <bean class="com.softeem.interceptor.MyInterceptor"/>-->
<ref bean="myInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
自定义拦截器
/**
* @author muzi@softeem.com
* @description 自定义拦截器
* @since 2021/12/14 22:02
*/
@Component
public class MyInterceptor implements HandlerInterceptor {
/**
* 前置处理
* @param request
* @param response
* @param handler
* @return
* @throws Exception
*/
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
System.out.println(request.getRequestURL()+"这个URL在preHandle这里被拦截了");
return true;
}
/**
* 目标资源已经被SpringMVC处理之后(Controller里面的方法return)
* @param request
* @param response
* @param handler
* @param modelAndView
* @throws Exception
*/
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
System.out.println(request.getRequestURL()+"这个URL在postHandle这里被拦截了");
}
/**
* 产生响应文本之后(数据和模板引擎绑定之后|数据被序列化了之后)
* @param request
* @param response
* @param handler
* @param ex
* @throws Exception
*/
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println(request.getRequestURL()+"这个URL在afterCompletion这里被拦截了");
}
}