データベースアカウントのパスワード暗号化の詳細な説明と例

データベースアカウントのパスワード暗号化の詳細な説明と例

データベースアカウントのパスワード暗号化の詳細な説明と例

データベースアカウントとパスワードはデータベース内で暗号化されることが多いのですが、問題があります。UserService を使用してパスワードを暗号化する場合、Spring Security で検証された暗号化方式が別途構成されるため、Spring Security も同期的に構成する必要があります。次のように:

<認証マネージャー>
  <認証プロバイダーのユーザーサービスref="userDetailService">
    <パスワード エンコーダ ref="passwordEncoder" />
  </認証プロバイダー>
</認証マネージャー>

<beans:bean class="com.sapphire.security.MyPasswordEncoder" id="passwordEncoder">
  <beans:コンストラクタ引数値="md5"></beans:コンストラクタ引数>
</beans:bean>

上記の構成ファイルに示されているように、passwordEncoder は Spring Security がアカウントを暗号化して検証する場所です。

傍受後、Spring Security はまずユーザーを検索し、自身で定義された userDetailService を通じて対応するユーザーを見つけ、次にフレームワークがパスワード一致検証を実行します。

userDetailService からユーザーを取得した後、フレームワークで定義されている DaoAuthenticationProvider に入り、認証メソッドにジャンプします。

このメソッドは、次の 2 つのチェックを実行します。

* preAuthenticationChecks: 主にユーザー情報の有効期限が切れていないかなどを確認します。呼び出しメソッドはuserDetailで定義されています。
* additionalAuthenticationChecks: これはユーザー名とパスワードの検証プロセスです。

PasswordEncoder は xml に挿入される Bean なので、自分で完成した passwordEncoder を呼び出します。

パブリッククラス MyPasswordEncoder は MessageDigestPasswordEncoder を拡張します {
  パブリックMyPasswordEncoder(文字列アルゴリズム) {
   スーパー(アルゴリズム);
  }

  @オーバーライド
  パブリックブール値isPasswordValid(文字列encPass、文字列rawPass、オブジェクトsalt) {
   encPass.equals(DigestUtils.md5DigestAsHex(rawPass.getBytes())) を返します。
  }
}

これは私の実装のシンプルなバージョンです。Spring に付属する暗号化アルゴリズムを呼び出します。非常にシンプルです。もちろん、複雑な暗号化方法を使用することもできます。これはあなた次第です。

読んでいただきありがとうございます。お役に立てれば幸いです。このサイトをサポートしていただきありがとうございます。

<<:  userdel コマンドを使用して Linux ユーザーを削除する方法の詳細なチュートリアル

>>:  Vue.js を学ぶ際に遭遇する落とし穴

推薦する

docker を使用して Redis マスター/スレーブを構築する方法

1. Docker環境を構築する1. Dockerfileを作成する Centos:latest か...

JavaScript での正規表現の使用について詳しく学ぶ

目次1. 正規表現とは何か1. 正規表現の特徴2. 正規表現の使用2. 正規表現における特殊文字1....

MySQL で 1000 万件のレコードをすばやくクエリする方法

目次通常のページングクエリ最適化する方法大きなオフセット使用ID制限大量データ問題の最適化通常のペー...

Vue3.xはコンポーネント通信にmitt.jsを使用します

目次クイックスタート使い方基本原則Vue2.x はコンポーネント通信に EventBus を使用しま...

AWS無料サーバーアプリケーションとネットワークプロキシ設定チュートリアルの詳細な説明

目次予防必要条件AWSアカウントを申請する仮想マシンの申請と有効化仮想マシンを申請するセキュリティグ...

Viteプロジェクトを作成する手順

目次序文yarn create は何をしますか?ソースコード分析プロジェクトの依存関係テンプレート構...

クロスドメイン js フロントエンドの 8 つの実装ソリューション

目次1. jsonp クロスドメイン2. document.domain + iframe クロスド...

JavaScript でカルーセル効果を実装する

この記事では、カルーセルの効果を実現するためのJavaScriptの具体的なコードを参考までに共有し...

MySQLにおける時刻日付型と文字列型の選択について

目次1. DATETIMEとTIMESTAMPの使用1. 類似点2. 相違点3. 選択2. varc...

Dockerは起動されていないコンテナの設定情報を変更します

私が初めてdockerを使用したときは、dockerfileやdocker-composeを使用して...

MySQL での一時テーブルの使用例

ここ2日間ちょっと忙しくて、公式アカウントも数日更新が止まってしまいました。その結果、何人かの読者か...

base target="" はフレームを開くためのベースリンクのターゲットを指定します

<base target=_blank> は、基本リンクのターゲット フレームを新しいペ...

MySQL テーブルにはどのくらいの量のデータを保存できますか?

プログラマーは MySQL を扱う機会が多く、毎日触れているとも言えますが、MySQL テーブルには...

MySQL 5.7.17 とワークベンチのインストールと設定のグラフィックチュートリアル

この記事では、MySQL 5.7.17ワークベンチのインストールと設定方法を参考までに紹介します。具...

Nginx リバース プロキシでセッション永続性を実装する 2 つの方法の詳細な説明

1. ip_hash: ip_hash は、送信元アドレス ハッシュ アルゴリズムを使用して、サーバ...