6

現在FORM、glassfish v2.1でベース認証を使用してユーザーにログインしていますが、正常に機能します。に切り替えてProgrammaticLogin、最初に要求されたURLを取得して(つまり、ログインページにリダイレクトする前に)、プログラムによるログインコードで使用して、認証後にユーザーが要求されたページにリダイレクトされるようにしたい。

-のソースコードを見てきましj_security_checkた。私の場合はFormAuthenticator(catalina codebase)で、最初のリクエストをセッション内のSavedRequestオブジェクトに保存しますが、そのセッションはそうではStandardSessionなく、HttpSession直接アクセスする方法はありません。

または、認証メカニズムを別のFORMものに変更する必要がありますか?

ありがとう!

4

2 に答える 2

8

わかりました、私は答えを見つけました。だからここにあります:

基本的に私が達成しようとしていたのは、グラスフィッシュに openid ベースの認証メカニズムを実装することでした。これを行う 1 つの方法は を使用することですProgrammaticLoginが、これにはいくつかの欠点があります。要求された URL にリダイレクトする簡単な方法はなく、プログラムによる認証はプログラマーにとってより多くの作業を意味します。そのため、いろいろ読んだ後、目標を達成するためのより良い方法であるサーバー認証モジュールまたは SAM を見つけました。これは、 JSR-196で説明されている標準プロセスの一部であり、 glassfish 用のプラグ可能な認証モジュールを作成する方法を提供します (つまりFORM、標準などとは異なりますBASIC)。この方法を使用すると、宣言型セキュリティ モデルを維持しながら、新しい認証モジュールをサーブレット コンテナーにプラグインできます。

したがって、私がする必要があるのは、独自のカスタム SAM を作成することだけです。簡単な方法は次のとおりです。

  1. ほとんどが次のメソッドに要約される ServerAuthModule インターフェイスを実装します。

    AuthStatus validateRequest(MessageInfo messageInfo, security.auth.Subject clientSubject, security.auth.Subject serviceSubject) throws AuthException

  2. SAM を jar にパッケージ化し、その jar を glassfish lib ディレクトリに配置します。

  3. アプリケーションで使用するために SAM を構成します。これは 2 つのステップで行われます。

    • SAM を domain.xml で message-security-provider として定義します。
    • アプリケーションで使用するために SAM をバインドします。これを行うには、アプリケーションの sun-web-app.xml で httpservlet-security-provider 属性を定義します。属性の値を、ステップ 1 で SAM に割り当てた名前に設定します。

詳細については、Ron Monzillo によるこの素晴らしいチュートリアルをお読みください。

更新: AuthenticRoastと呼ばれる、この問題に対するよりシンプルでエレガントな解決策があります。これは、Aike Sommer によって作成された Java ライブラリであり、独自のプラグ可能なオーセンティケーターを作成できます。

于 2009-06-17T14:53:48.883 に答える
1

フォーム認証が機能しない場合は、認証に ServletFilter の使用に切り替えることをお勧めします。FORM ベースの認証を取り除き、保護したいページのフィルターにマッピングを追加するだけです。

于 2009-06-15T05:18:45.117 に答える