spring mvc 拦截器

来源:互联网 发布:制作菜单的软件 编辑:程序博客网 时间:2024/06/01 07:44

Spring MVC框架中的Interceptor,与Servlet API中的Filter十分类似,用于对Web请求进行预处理/后处理。通常情况下这些预处理/后处理逻辑是通用的,可以被应用于所有或多个Web请求,例如:

  • 记录Web请求相关日志,可以用于做一些信息监控、统计、分析
  • 检查Web请求访问权限,例如发现用户没有登录后,重定向到登录页面

  • 打开/关闭数据库连接——预处理时打开,后处理关闭,可以避免在所有业务方法中都编写类似代码,也不会忘记关闭数据库连






HandlerInterceptor接口
public interface HandlerInterceptor {    boolean preHandle(HttpServletRequest request,                       HttpServletResponse response,                       Object handler) throws Exception;    void postHandle(HttpServletRequest request,                     HttpServletResponse response,                     Object handler, ModelAndView modelAndView) throws Exception;    void afterCompletion(HttpServletRequest request,                          HttpServletResponse response,                          Object handler, Exception ex) throws Exception;}
  • preHandle():预处理回调方法,若方法返回值为true,请求继续(调用下一个拦截器或处理器方法);若方法返回值为false,请求处理流程中断,不会继续调用其他的拦截器或处理器方法,此时需要通过response产生响应;
  • postHandle():后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时可以通过modelAndView对模型数据进行处理或对视图进行处理
  • afterCompletion():整个请求处理完毕回调方法,即在视图渲染完毕时调用

HandlerInterceptorAdapter:有时只需要HandlerInerceptor中的一个方法,可以使用HandlerInterceptorAdapter,HandlerInterceptorAdapter是一个实现了HandlerInterceptor的抽象类,它的三个实现方法都为空实现(或者返回true),继承该抽象类后可以仅仅实现其中的一个方法。
public class Interceptor extends HandlerInterceptorAdapter {    public boolean preHandle(HttpServletRequest request,                             HttpServletResponse response,                             Object handler) throws Exception {        System.out.println("This is interceptor.");        return true;    }}

配置Interceptor
@Configurationpublic class WebConfig extends WebMvcConfigurerAdapter {    @Override    public void addInterceptors(InterceptorRegistry registry) {        registry.addInterceptor(new LocaleInterceptor());        registry.addInterceptor(new ThemeInterceptor()).addPathPatterns("/**").excludePathPatterns("/admin/**");        registry.addInterceptor(new SecurityInterceptor()).addPathPatterns("/secure/*");    }}


0 0
原创粉丝点击