自定义 HandlerInterceptor 使用注意事项

目录

HandlerInterceptor 是什么

HandlerInterceptor 使用

HandlerInterceptor 使用注意事项


HandlerInterceptor 是什么

hander 的拦截器,用来拦截handler 的执行。执行时机:handdlerAdaptor 调用 handler 后,DispatcherServlet 返回视图前。

可以用来做权限拦截,返回后的统一处理等,比如添加统一的返回数据(用户登录后的信息)。

HandlerInterceptor 使用

自定义 Interceptor

@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            //response.setContentType("text/html;charset=UTF-8");
            response.sendRedirect("http://www.baidu.com");
    }
}

注册到 web 环境中

@Configuration
public class WebConfig  implements WebMvcConfigurer {
    @Autowired
    private MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        registry.addInterceptor(myInterceptor).addPathPatterns("/**");
    }

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {

    }
}

HandlerInterceptor 使用注意事项

postHandle 后处理是在 dispatcherServlet 调用 handlerAdaptor 处理请求并返回后才执行的,所以针对 @RestController 或者 @ResponseBody 的接口,postHandle 如果操作了 response 对象会报下面的错误:

如果你确实需要后处理 json 类型的 response ,可以借助于 ResponseBodyAdvice 来实现 ,可以参考上篇文章:《公司封装的 ResponseBodyAdvice 有问题,很严重》


如果觉得还不错的话,关注、分享、在看, 原创不易,且看且珍惜~

 

posted on 2021-11-23 11:49  XuHe1  阅读(42)  评论(0编辑  收藏  举报