2

プロジェクトでユーザーのログイン/サインアップを管理するために春のセキュリティを使用しています。ログイン試行に 3 回失敗した後、ユーザー ロックアウト機能を実装する必要があります。データベースの「Users」テーブルに別のフィールド「account_non_locked」を追加しました。

私が直面している問題は、春のセキュリティが新しく追加された列を更新しないことです。ソースコードを掘り下げたところ、デフォルトの UserDetailsManager で sql ステートメントが次のように記述されていることがわかりました。

"insert into users (username, password, enabled) values (?,?,?)"

これは、新しい列が認識されない理由を説明しています。

そのため、そのファイルをコピーして、自分のニーズに合わせて変更します。つまり、CustomUserDetailsManager.java です。

独自のカスタマイズされた UserDetailsManager を使用するように春のセキュリティを構成することはできません。現在の構成ファイルは次のとおりです。

<authentication-manager alias="authenticationManager">
  <authentication-provider>
    <password-encoder ref="passwordEncoder" />
    <jdbc-user-service id="userDetailsService" data-source-ref="dataSource" />
  </authentication-provider>
</authentication-manager>
<beans:bean id="passwordEncoder" class="org.springframework.security.crypto.password.StandardPasswordEncoder" />

これを適切に構成する例をオンラインで見つけることができません。助けてください、事前に感謝します!

4

1 に答える 1

0

セクション3.2.4 他の認証プロバイダーの使用 では、 authentication-provider@user-service-refを使用してこれを行う方法について説明しています。

例は次のようになります。

<authentication-manager alias="authenticationManager">
  <authentication-provider user-service-ref="customUserDetailsManager">
    <password-encoder ref="passwordEncoder" />
  </authentication-provider>
</authentication-manager>

<beans:bean id="passwordEncoder" 
  class="org.springframework.security.crypto.password.StandardPasswordEncoder" />

<beans:bean id="customUserDetailsManager"
  class="com.example.CustomUserDetailsManager">
  <!-- additional properties -->
</beans:bean>
于 2013-10-17T01:46:30.947 に答える