4

すでに認証済みで 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 を適切にクリアしないと。

4

2 に答える 2

2

LoginModule で HttpServletRequest を取得する必要はありません。LoginModule はアイデンティティ ストアの JAAS バージョンであり、ユーザー、その資格情報、およびオプションでグループまたはロールのデータベース/リポジトリです。

Tomcat では、LoginModule は主要な ID ストア タイプではありません。Realm はそうですが、Tomcat はブリッジを提供するので、とにかく LoginModule を使用できます。しかし、お気づきのように、Java EE での JAAS の使用は標準ではありません。サーバーは JAAS をまったく使用しないか、他のサーバーとは異なる方法で使用します。

あなたが探しているのは認証メカニズムです。これは、リクエスト、レスポンス、およびセッションとのやり取りを担当するものです。Tomcat にはそのための 2 つのインターフェースがあり、1 つは Tomcat 固有のもので、もう 1 つは Java EE 標準です。

  1. オーセンティケーターは、 https: //tomcat.apache.org/tomcat-9.0-doc/api/org/apache/catalina/authenticator/package-summary.htmlを参照してください。
  2. ServerAuthModuleは、 https: //tomcat.apache.org/tomcat-9.0-doc/config/jaspic.htmlおよびhttp://docs.oracle.com/javaee/7/api/javax/security/auth/message/moduleを参照してください。 /ServerAuthModule.html
于 2016-05-26T11:05:08.477 に答える
2

Jboss では、次の方法で取得できます。

HttpServletRequest  request = (HttpServletRequest) PolicyContext
                        .getContext("javax.servlet.http.HttpServletRequest");

しかし、PolicyContext は JACC にあり、Tomcat はまだ JACC をサポートしていません。Tomcat 9 でサポートされる可能性がありますが、Tomcat の優先度は低くなります。

于 2016-05-17T09:29:34.373 に答える