여러분은 이러한 메커니즘을 직접 관리해야한다고 생각합니다. 예를 들어, 이것이 한 번 인증 한 다음 인증을 세션과 연관시키는 웹 응용 프로그램 인 경우입니다. 세션에 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);
}
}
}
할 수 있습니다. 그것은 조금 놀랍다. – user525742
나는 그들이 그 양상을 사용자에게 완전히 맡긴다 고 생각한다. LoginContext를 생성 할 때의 의미는 완전히 응용 프로그램에 따라 다르다. 모든 소켓이 사용자 이름/암호 로그인 페이지에 다시 연결될 때 발생하는 X.509 SSL 인증서 인증을 갖는 것은 매우 다르다. –