4

短いバージョン:純粋な Java EE 6 では、フォームベースの認証をカスタマイズするSpring の Authentication Processing Filter のようなものはありますか?

長いバージョン:私は純粋な Java EE 6 Web アプリケーション (JSF2、CDI) に取り組んでいます。これは、後で使用される具体的な Java EE 6 コンテナーから独立している必要があります。

アクセスが制限された JSF2 ページは、サブフォルダー/pagesに格納されます。私の web.xml では、これらのページへのアクセスを制限するために次のように定義しました。

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>??????????</realm-name>
    <form-login-config>
        <form-login-page>/login.jsf</form-login-page>
        <form-error-page>/access_denied.jsf</form-error-page>
    </form-login-config>
</login-config>

<security-constraint>
    <display-name>pages_auth</display-name>
    <web-resource-collection>
        <web-resource-name>pages</web-resource-name>
        <url-pattern>/pages/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>AuthenticatedUser</role-name>
    </auth-constraint>
</security-constraint>

<security-role>
    <role-name>AuthenticatedUser</role-name>
</security-role>

「????」で示されるように 上記のコードでは、JDBC のような事前定義されたレルムの 1 つを使用できません。これは、使用する認証が非常にカスタムであり (厄介な詳細: 資格情報が醜いレガシー システムに対してチェックされる)、Java コーディングが必要になるためです。

認証の成功を示すブール値を返すパラメーター「ログイン」と「パスワード」を使用して、いくつかの認証メソッドをオーバーライドするインターフェイスを実装する新しいクラスを作成できると期待していました。

しかし、トピックについて数時間読んだ後、私は完全に道に迷いました:-(JAAS LoginModuleとRealmを実装する必要がありますか?これは私には非常に複雑に見えます.または、それを行うための別の標準Java EE 6方法がありますか?または代わりに ServletFilter を実装する必要がありますか?

4

3 に答える 3

2

レルム名タグに、作成したレルムの名前をコンテナに入れる必要があります。これはレルムタイプではなく、ユーザーが選択したレルム名のみです。

JBoss ASを使用するアプリがあり、例として以下の設定を行います。

web.xml

<realm-name>weblog-jaas-realm</realm-name>

スタンドアロン.xml

<security-domain name="weblog-jaas-realm">
    <authentication>
        <login-module code="Database" flag="required">
            [...]
        </login-module>
    </authentication>
</security-domain>
于 2012-06-08T14:56:35.970 に答える
1

独自のカスタムレルムを作成することを検討するのではなく、サーブレットフィルタの使用を検討しないことで、適切なJAASLoginModule実装を使用してこれをかなり簡単に実現できます。これは、Tomcat、WebLogic、WebSphereなどのさまざまなJavaEEコンテナで非常にうまく機能しています。

JAASはAPIを明確に定義し、LoginModule実装を移植可能にしますが、各コンテナーでJAASを構成する方法が異なり、適切なプリンシパル名とロールプリンシパル実装マッピングを設定して機能させる必要がある場合があります。

于 2012-09-18T13:01:26.257 に答える
1

Spring Securityを使用することになりました。Java EE 6 ライブラリーでは、カスタム認証プロバイダーを簡単に実装できないようです。もちろん、サーブレット フィルターを使用してゼロからすべてを実装することもできますが、それはエラーが発生しやすいと私は考えています。Spring Security は、多くのライブラリを webapp に追加しますが、良い解決策のようです。

于 2012-06-22T06:34:22.263 に答える