目录
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 有问题,很严重》。
如果觉得还不错的话,关注、分享、在看, 原创不易,且看且珍惜~