プロジェクトについては、引き続き書き込みを行っていきますが、現時点では、プロジェクトにログインするためのデータベース ユーザー名とパスワードが実装されており、独自のログイン ページが使用されています。
パスワード暗号化には、PasswordEncoder インターフェイスを使用します。
public interface PasswordEncoder {
String encode(CharSequence rawPassword);
boolean matches(CharSequence rawPassword, String encodedPassword);
default boolean upgradeEncoding(String encodedPassword) {
return false;
}
}
このインターフェースには 3 つのメソッドがあります
最初のエンコード方法: 暗号化方法。返される文字列は暗号化された文字列です。
2 番目の match メソッド: パスワード比較のメソッド。rawPassword はプレーンテキストのパスワード、encodedPassword は暗号化されたパスワードです。このパラメータを渡すと、自動的に比較され、ブール値が戻されます。
3 番目の upgradeEncoding メソッド: 暗号化方式をアップグレードする必要があるかどうか
まず最初に、このインターフェースの実装クラスを見てみましょう (alt+h)
このうち、MessageDigestPasswordEncoderはmd5です
BCryptPasswordEncoder もよく使用されます。
BCryptPasswordEncoder メソッドは、SHA-256+ランダム ソルト+キーを使用してパスワードを暗号化します。
class SecurityDemoApplicationTests {
/**
* security中密码自带盐
*/
@Test
void contextLoads() {
BCryptPasswordEncoder B = new BCryptPasswordEncoder();
for (int i = 0; i < 10; i++){
System.out.println(B.encode("123"));
}
}
}
このメソッドを使用して 123 を暗号化して取得します。
パスワードの強度は 4 から 31 の間で設定でき、数字が大きいほどパスワードの強度が高く、頻繁にパスワードを試行するのを防ぐため、比較にかかる時間が長くなります。
Spring Security でデフォルトで使用される暗号化方式は次のとおりです。
PasswordEncoderFactories をグローバルに検索する
このクラスは何のためにありますか? クリックして自分で開くことができ、その中で DelegatingPasswordEncoder が初期化されます。
オブジェクト、ここではすべての暗号化方式を書き出します。パスワードの暗号化方式と一致します。デフォルトは「bcrypt」です。
パスワードのアップグレードを記録する方法は次のとおりです
まず、UserService に UserDetailsPasswordService メソッドを実装します。
そんな方法もあるんですね
ユーザーがログインすると、このメソッドはユーザーのパスワードをアップグレードする必要があるかどうかを自動的に判断します。
判断は以下に基づいて行われます。
1. ユーザーのパスワード暗号化方式が現在のデフォルト方式であるかどうか。
2. 同じ暗号化スキームを異なる強度にアップグレードすることもできます
ログインに成功すると、パスワードが元のパスワードから変更されます
に変更されました
これがデフォルトの暗号化方式です。
デフォルトの暗号化方式を変更することもできます
以上がパスワードの暗号化と更新です。