0

Tomcat レルム機能と並行して、ユーザー ログインの 2 番目の方法を構築しようとしています。つまり、認証されていないユーザーは次のいずれかを行うことができます:
1. レルムを呼び出してサインインする
2. 有効なトークンを提供し、自動的にログインする

私は2を達成しようとしています。そのため、フィルターを使用してリクエストをラッパーにリダイレクトします。そのラッパー内で をオーバーライドしてgetUserPrincipal、そのユーザーのプリンシパルを作成できるようにします。次に、コンテナーはプリンシパルを認識し、ユーザーがログイン ページにリダイレクトせずに入力できるようにします。

ただし、問題は次のとおりです。すべてのリクエストが正しいプリンシパルを取得するとは限らないようです。サーブレットに関するリクエスト、およびサーブレットがDispatcherリクエストの転送に使用する場合は、プリンシパル セットが取得されます。単純なリンクまたはサーブレットを使用してもメソッドsendRedirectが呼び出されないためgetUserPrincipal、ユーザーが方法 2 を使用してログインしている場合でもログイン ページが表示されます。

これは、そのユーザー用に作成されたプリンシパルが「一時的」であるようなものです。ユーザーが認証されていることをコンテナが認識できるように、プリンシパルをセッションまたはどこかに保存する方法があるかどうか疑問に思っています。

4

1 に答える 1

0

I've done exactly this but I did it by using the Tomcat JAAS Realm and providing two LoginModules, one for the ticket, and one for username/password. It takes some integrating to prevent getting a login page on a ticket login. Actually in my system there is a third login method, by valid client certificate, and there is a fourth login module, to lookup and assign the roles for the user, however he got established by one of the first three modules.

There is a Google Code project called AuthenticRoast that I have contributed to that helps in this regard. Integrates with both Tomcat 6 and 7, also Glassfish although I haven't tried that.

于 2012-09-17T03:06:01.313 に答える