自定义实现拦截器:
自定一个类 实现HandlerInterceptor接口
拦截器是AOP思想的具体应用
首先创建一个自定义拦截器类实现HandlerInterceptor接口,然后重写该接口的三个方法,分别是处理前,判断请求是否放行,然后是处理后和清理过程进入日志方便维护。
package total.config;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 自定义拦截器
*/
public class MyInterceptor implements HandlerInterceptor {
@Override
//return true:执行下一个拦截器 直接放行
//return false:不执行下一个拦截器 不放行
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("===处理前===");
return true;
}
//后两个都添加拦截日志
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("===处理后===");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("===清理===");
}
}
然后再spring-mvc.xml中配置拦截器:
<!--拦截器配置-->
<mvc:interceptors>
<mvc:interceptor>
<!-- /** 包括该请求下的所有请求-->
<mvc:mapping path="/**"/>
<!--让哪个拦截器类来执行过滤-->
<bean class="total.config.MyInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
mvc:mapping path="/**"
代表了拦截器作用于哪些url的请求
如果是mvc:mapping path="/hello/**"
就代表了拦截器作用于/hello下的所有请求。
然后添加拦截器类,表示使用哪个拦截器进行拦截。
我们在一个请求前加上一个“执行了”输出到控制台:
@RequestMapping("/ajax")
public String AjaxTest(){
System.out.println("执行了ajax");
return "Ajax";
}
可以看到拦截器生效了,因为是true,请求放行
那么把拦截器设置为false:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("===处理前===");
return false;
}
发现只有处理前,而/Ajax/ajax请求并没有执行,也就是说拦截器生效了
拦截器一般在判断用户有没有权限进入某页面,或有没有登录进入某页面时使用,判断Cookie使用。