package cn.org.rapid_framework.distributed.threadlocal.hessian; import java.io.IOException; import java.util.Enumeration; import javax.servlet.FilterChain; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.filter.OncePerRequestFilter; import cn.org.rapid_framework.distributed.threadlocal.DistributedThreadLocal; /** * 用于从 Http Header 中取回DistributedThreadLocal中的信息,并存放在DistributedThreadLocal中 * * @author badqiu */ public class DistributedThreadLocalFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { Enumeration iteator = request.getHeaderNames(); while(iteator.hasMoreElements()) { String key = iteator.nextElement().toString(); if(key.startsWith(DistributedThreadLocal.DISTRIBUTED_THREAD_LOCAL_KEY_PREFIX)) { DistributedThreadLocal.put(key.substring(DistributedThreadLocal.DISTRIBUTED_THREAD_LOCAL_KEY_PREFIX.length()), request.getHeader(key)); } } DistributedThreadLocal.onReceivedDistributedThreadLocal(); filterChain.doFilter(request, response); } }