框架建设实战9——通用请求处理组件

30 阅读1分钟

我们都知道,springMVC开发中,经常会使用到的就是拦截器和过滤器。

两者区别如下:

1.处理器拦截器HandlerInterceptor是Spring MVC提供的特性,依赖于Spring MVC框架,而不依赖Servlet容器;

2.Filter则是Servlet的特性,属于Servlet的规范,并且依赖Servlet容器。

由于我们的框架是基于springboot系列的,所以一般情况下,我们基于HandlerInterceptor来做通用拦截即可。此接口也是我们建立通用请求处理组件的核心。

组件的具体创建步骤如下:

1.定义拦截器

其代码模板如下:

/**
 * 通用请求拦截器
 */
public class MyRequestInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //biz logic
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        //biz logic
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        //biz logic
    }
}

跟aop一样,我们只需要专注自己的业务逻辑即可。

常见业务场景有:校验用户登录态、将业务请求头的信息放入线程本地变量中,便于上下文的存取等。

那么如何定义上下文呢?一般情况下,我们基于ThreadLocal即可。比如:

public static final ThreadLocal<Context> context = new TransmittableThreadLocal<>();

2.注册拦截器

@Configuration
@Order(1)
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyRequestInterceptor());
    }
}

可以看到,有了通用处理组件,业务研发接入就会少了很多的配置。