本文共 3638 字,大约阅读时间需要 12 分钟。
public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value);}
public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { ThreadLocalMap.Entry e = map.getEntry(this); if (e != null) { @SuppressWarnings("unchecked") T result = (T)e.value; return result; } } return setInitialValue();}
public void remove() { ThreadLocalMap m = getMap(Thread.currentThread()); if (m != null) m.remove(this);}
public class ThreadLocalUtil { private final static ThreadLocalthreadLocal = new ThreadLocal<>(); public static void add(Long id) { threadLocal.set(id); } public static Long getId() { return threadLocal.get(); } public static void remove() { threadLocal.remove(); }}
@Slf4jpublic class HttpFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest reqeust = (HttpServletRequest)servletRequest; log.info("do filter, {}, {}", Thread.currentThread().getId(), reqeust.getServletPath()); ThreadLocalUtil.add(Thread.currentThread().getId()); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { }}
@Beanpublic FilterRegistrationBean httpFilter() { FilterRegistrationBean registrationBean = new FilterRegistrationBean(); registrationBean.setFilter(new HttpFilter()); registrationBean.addUrlPatterns("/*"); return registrationBean;}
@Slf4jpublic class HttpInterceptor extends HandlerInterceptorAdapter { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.info("preHandle"); return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { ThreadLocalUtil.remove(); log.info("afterCompletion"); }}
@Configurationpublic class InterceptorConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new HttpInterceptor()).addPathPatterns("/**"); }}
@GetMapping("/test4")public String getTest4() { return ThreadLocalUtil.getId().toString();}
转载地址:http://pgomi.baihongyu.com/