0

アプリケーションの現在のセットアップは、JBoss サーバーを使用した JSF です。ログインに失敗したページに移動する既存のレルム認証に加えて、追加のロジックを含めたいと思います。Realm(Java) から成功した pricinpal を無効にするものを探しています。

シナリオ: ユーザーは正しいパスワードを入力してログインしましたが、ログインを許可しない特定の条件があります。

構成:

スタンドアロン.xml

<security-domain name="login">
    <authentication>
        <login-module code="Database" flag="sufficient">
            <module-option name="dsJndiName" value="java:/datasource"/>
            <module-option name="principalsQuery" value="query"/>
            <module-option name="rolesQuery" value="query"/>
            <module-option name="hashAlgorithm" value="???"/>
            <module-option name="hashEncoding" value="???"/>
            <module-option name="principalClass" value="org.jboss.security.SimplePrincipal"/>
        </login-module>
    </authentication>
</security-domain>

jboss-web.xml

<jboss-web>
   <security-domain>login</security-domain>
</jboss-web>

顔-config.xml

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>ApplicationRealm</realm-name>
    <form-login-config>
        <form-login-page>login.html</form-login-page>
        <form-error-page>login-error.html</form-error-page>
    </form-login-config>
</login-config>

簡単な変更にもかかわらず、非常に簡単ではないアイデアはほとんどありませんでした。

  • セッションからプリンシパルを削除し、ログイン ページでチェックされるパラメーターを設定します (単一のログイン ページのみ)
  • カスタムレルムログインモジュールを書く

ありがとうございました

4

1 に答える 1

2

追加のチェックに、アクセス可能なデータベースと同じデータベースでのデータベース クエリが含まれる場合、java:/datasource必要なのはprincipalsQuery.

または、追加のロジックを実行するサーブレット フィルターを実装することもできます。テストが失敗し、ユーザーにアクセスを許可しない場合は、HttpServletRequest.logout()を呼び出してから、login-error.html ページにリダイレクトします。

ただし、security-domain構成を変更し、追加のロジックを含む 2 番目のログイン モジュールを追加することで、これを行う方がよりエレガントな場合があります。

<security-domain name="login">
    <authentication>
        <login-module code="Database"
                      flag="required">
            <module-option name="dsJndiName" value="java:/datasource"/>
            <module-option name="principalsQuery" value="query"/>
            <module-option name="rolesQuery" value="query"/>
            <module-option name="hashAlgorithm" value="???"/>
            <module-option name="hashEncoding" value="???"/>
            <module-option name="principalClass" value="org.jboss.security.SimplePrincipal"/>
        </login-module>
        <login-module code="com.yourorg.yourapp.ExtendedLoginCheck"
                      flag="required"
                      module="name-of-wildfly-module-containing-ExtendedLoginCheck">
            <module-option name="your module option" value="your module option value" />
            ...
        </login-module>
    </authentication>
</security-domain>

ここで、javax.security.auth.spi.LoginModulecom.yourorg.yourapp.ExtendedLoginCheckを実装します。属性値が に変更されていることに注意してください。これらのモジュールは次々に実行され、認証の試行が成功するには両方が成功する必要があります。login-module flagrequired

于 2017-01-02T13:07:23.740 に答える