配置讲解-业务过滤器的讲解
【摘要】 过滤器的作用在业务服务中通过需要一些公共参数,比如分布式链路traceId、用户id、平台code等,按道理说这些这些参数是由Gateway网关传递而来,放到了request请求头中,业务服务需要的时候直接去request中获取就可以了。但由于request的范围是ThreadLocal,是和线程绑定的,在使用线程池的情况下,request会丢失,所以有了线程池组件、Hystrix组件。在线...
过滤器的作用
在业务服务中通过需要一些公共参数,比如分布式链路traceId、用户id、平台code等,按道理说这些这些参数是由Gateway网关传递而来,放到了request请求头中,业务服务需要的时候直接去request中获取就可以了。
但由于request的范围是ThreadLocal,是和线程绑定的,在使用线程池的情况下,request会丢失,所以有了线程池组件、Hystrix组件。
在线程池组件和Hystrix组件中,对公共配置中的线程绑定工具BaseParameterHolder做了适配,这个工具其实是ThreadLocal,但线程池的组件和Hystrix的组件对此工具做了增强,只要将数据放到BaseParameterHolder里,就会正常的拿到
过滤器
@Slf4j
public class BaseParameterFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response, final FilterChain filterChain) throws ServletException, IOException {
log.info("current thread doFilterInternal : {}",Thread.currentThread().getName());
String traceId = request.getHeader(TRACE_ID);
String gray = request.getHeader(GRAY_PARAMETER);
String userId = request.getHeader(USER_ID);
String code = request.getHeader(CODE);
try {
if (StringUtil.isNotEmpty(traceId)) {
BaseParameterHolder.setParameter(TRACE_ID,traceId);
MDC.put(TRACE_ID,traceId);
}
if (StringUtil.isNotEmpty(gray)) {
BaseParameterHolder.setParameter(GRAY_PARAMETER,gray);
MDC.put(GRAY_PARAMETER,gray);
}
if (StringUtil.isNotEmpty(userId)) {
BaseParameterHolder.setParameter(USER_ID,userId);
MDC.put(USER_ID,userId);
}
if (StringUtil.isNotEmpty(code)) {
BaseParameterHolder.setParameter(CODE,code);
MDC.put(CODE,code);
}
filterChain.doFilter(request, response);
}finally {
BaseParameterHolder.removeParameter(TRACE_ID);
MDC.remove(TRACE_ID);
BaseParameterHolder.removeParameter(GRAY_PARAMETER);
MDC.remove(GRAY_PARAMETER);
BaseParameterHolder.removeParameter(USER_ID);
MDC.remove(USER_ID);
BaseParameterHolder.removeParameter(CODE);
MDC.remove(CODE);
}
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)