springboot使用拦截器,feign拦截器

总体来说就是 两步

1. 编写拦截器
2. 注册拦截器
  • 代码1 编写一个 拦截器
public class LogInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
    	// 调用时间:Controller方法处理之前
        // 执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行
        // 若返回false,则中断执行,注意:不会进入afterCompletion
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        // 调用前提:preHandle返回true
        // 调用时间:Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作
        // 执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序倒着执行。
        // 备注:postHandle虽然post打头,但post、get方法都能处理
    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
		// 调用前提:preHandle返回true
		// 调用时间:DispatcherServlet进行视图的渲染之后
		// 多用于清理资源
    }
}

  • 注册拦截器
@Configuration
public class MvcConfigurer extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LogInterceptor()).addPathPatterns("/**").excludePathPatterns();
    }
}

实现一个 feign拦截器,用于设置请求header

代码 : 本实例用于设置header ti,并用logback 打印链路追踪日志

public class FeignRequestInterceptor implements RequestInterceptor {
    /**
     * 由于过滤器在拦截器之前执行,所以  tiLevel 逻辑一致此处
     * @param requestTemplate
     */
    @Override
    public void apply(RequestTemplate requestTemplate) {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        Enumeration<String> headerNames = request.getHeaderNames();
        if (headerNames != null) {
            String ti = request.getHeader(MdcUtils.TI);
            String tiLevel = request.getHeader(MdcUtils.TI_LEVEL);
            requestTemplate.header(MdcUtils.TI, ti);
            MdcUtils.put(MdcUtils.TI,ti);
            int targetTiLevel;
            try{
                targetTiLevel = StringUtils.isEmpty(tiLevel) ? 1 : Integer.parseInt(tiLevel) + 1;
            } catch (Exception e){
                targetTiLevel = 1;
            }
            MdcUtils.put(MdcUtils.TI_LEVEL, targetTiLevel+"");
            requestTemplate.header(MdcUtils.TI_LEVEL, targetTiLevel + "");
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值