Я думаю, вам нужно управлять таким механизмом самостоятельно. Например, если это веб-приложение, в котором вы выполняете аутентификацию один раз, а затем связываете аутентификацию с сеансом. Вы сохраняете LoginContext
в сеансе. Одним из способов сделать его доступным в других частях кода было бы создание локальной обертки потока, которую вы устанавливаете / удаляете в начале / конце каждого вызова потока (такого как запрос).
public class LoginContextHolder {
private static ThreadLocal<LoginContext> ctx = new ThreadLocal<LoginContext>();
public static void set(LoginContext lc) {
ctx.set(lc);
}
public static LoginContext get() {
return ctx.get();
}
}
public class LoginContextFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
LoginContext ctx = null;
HttpSession sess = (HttpSession)((HttpRequest)request).getSession(false);
if (sess != null) {
ctx = (LoginContext)sess.getAttribute("ctx");
}
try {
LoginContextHolder.set(ctx);
chain.doFilter(request, response);
} finally {
LoginContextHolder.set(null);
}
}
}