すでに認証済みで Websphere で実行されている Tomcat7 でアプリケーションを認証するタスクがあります。
websphere のアプリケーションには JAAS カスタム ログイン モジュールがあり、以下に示すようにコールバック ハンドラを介して HttpServletRequest オブジェクトにアクセスし、(リクエストから取得される) セッション オブジェクトにユーザー関連情報を設定します。
javax.security.auth.callback.Callback callbacks[] = new javax.security.auth.callback.Callback[3];
callbacks[0] = new javax.security.auth.callback.NameCallback(
"Username: ");
callbacks[1] = new javax.security.auth.callback.PasswordCallback(
"Password: ", false);
callbacks[2] = new com.ibm.wsspi.security.auth.callback.WSServletRequestCallback(
"HttpServletRequest: ");
ここでの問題は、ご覧のとおり、上記のコードが websphere に固有のものであることです。そこで、Tomcat に固有のカスタム ログイン モジュールをもう 1 つ作成します。すみません、これは別の人がデザインしたものです。
問題は、Tomcat の Jaas ログイン モジュールで HttpServletRequest/HttpSession オブジェクトにアクセスするにはどうすればよいかということです。
注: HttpServeletRequest の代わりに ThreadLocal を使用してユーザー情報を渡そうとしましたが、スレッドは Tomcat のスレッド プールから再利用され、潜在的な問題 (メモリ リーク、ユーザー情報の共有など) が発生する可能性があるため、お勧めできません。 ThreadLocal を適切にクリアしないと。