このようなメカニズムを自分で管理する必要があると思います。たとえば、これが一度認証されてから、認証をセッションに関連付けるWebアプリケーションの場合です。セッションにLoginContext
を格納します。コードの他の部分で使用できるようにする1つの方法は、すべてのスレッド呼び出し(要求など)の開始時または終了時に設定または設定解除するスレッドローカルラッパーを作成することです。
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証明書の認証を持つことは非常に異なります。これは、すべてのソケットがユーザー名/パスワードのログインページに再接続する際に発生します。 –