57

Spring Security 3.1.4.RELEASE の時点で、 oldorg.springframework.security.authentication.encoding.PasswordEncoder は非推奨になり、org.springframework.security.crypto.password.PasswordEncoder. 私のアプリケーションはまだ一般公開されていないため、非推奨ではない新しい API に移行することにしました。

これまでReflectionSaltSource、ユーザーの登録日をパスワードのユーザーごとのソルトとして自動的に使用する がありました。

String encodedPassword = passwordEncoder.encodePassword(rawPassword, saltSource.getSalt(user));

ログイン プロセス中に、Spring は Bean を使用して、ユーザーがサインインできるかできないかを適切に検証しました。SHA-1 のデフォルト実装にStandardPasswordEncoderはグローバルを追加する機能しかないため、新しいパスワード エンコーダーではこれを実現できません。エンコーダ作成中の秘密のソルト。

非推奨の API を使用して設定する合理的な方法はありますか?

4

4 に答える 4

58

実際に既存の形式でユーザーを登録していない場合は、代わりにBCrypt パスワード エンコーダーの使用に切り替えることをお勧めします。

ソルトについてまったく心配する必要がないため、手間が大幅に軽減されます。詳細はエンコーダー内に完全にカプセル化されています。BCrypt を使用すると、プレーンなハッシュ アルゴリズムを使用するよりも強力であり、他の言語を使用するアプリケーションと互換性のある標準でもあります。

新しいアプリケーションに他のオプションを選択する理由はまったくありません。

于 2013-07-03T14:09:29.607 に答える
19

これが私のために働いているBCryptの実装です。

spring-security.xml で

<authentication-manager >
    <authentication-provider ref="authProvider"></authentication-provider>  
    </authentication-manager>
<beans:bean id="authProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
  <beans:property name="userDetailsService" ref="userDetailsServiceImpl" />
  <beans:property name="passwordEncoder" ref="encoder" />
</beans:bean>
<!-- For hashing and salting user passwords -->
    <beans:bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

ジャバクラスで

PasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
String hashedPassword = passwordEncoder.encode(yourpassword);

春のセキュリティの詳細な例については、ここをクリックしてください

これが役立つことを願っています。

ありがとう

于 2013-08-07T13:06:28.007 に答える