SpringMVC 中自定义拦截器
了解:
-
Interceptor拦截器的主要作用是拦截用户的请求并进行相应的处理。SpringMVC拦截器是可插拔式的设计,在配置文件中配置或取消即可。
-
HandlerInterceptor接口:
- Interceptor拦截器拦截请求是通过实现HandlerInterceptor接口实现的。定义一个Interceptor拦截器通常在该类中实现HandlerInterceptor接口,或者继承抽象类HandlerInterceptorAdapter。
-
HandlerInterceptor接口中定义了三个方法:
- boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handle) :
该方法在请求处理之前被调用。返回false表示请求结束,后续的Interceptor和Controller都不会再执行;当返回值为true时,就会继续调用下一个Interceptor的preHandle方法,若已经是最后一个Interceptor,就会调用当前请求的Controller。
- void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView mv) :
该方法只能在当前所属的interceptor的preHandle方法返回true之后才能被调用。在Controller方法之后DispatherServlet进行视图返回渲染之前执行,可以对Controller方法返回的ModelAndView对象进行操作。先声明该方法的Interceptor会后执行。
- void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception exception) :
该方法会在当前所属Interceptor的prehandle方法返回true时执行。该方法在DispatcherServlet渲染了对应的视图之后执行。
步骤:
一丶创建一个类 并继承 HandlerInterceptorAdapter
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
HttpSession session = request.getSession();
String[] noNeedAuthPage = new String[]{
"/home",
"/admin"
};
String uri = request.getRequestURI();
if (!Arrays.asList(noNeedAuthPage).contains(uri)) {
User user = (User) session.getAttribute("user");
if (null == user) {
response.sendRedirect("/loginPage");
return false;
}
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
super.afterCompletion(request, response, handler, ex);
}
}
二丶在SpringMVC配置文件中注册拦截器
<!-- 拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*"/>
<bean class="cbuc.tmall.interceptor.LoginInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
End …
以上便是SpringMVC中拦截器的配置, 欢迎参考交流 …