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

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

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

データベースアカウントとパスワードはデータベース内で暗号化されることが多いのですが、問題があります。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 を学ぶ際に遭遇する落とし穴

推薦する

ElementUI の el-dropdown に複数のパラメータを実装する方法

最近、業務上のボタンの増加により、ページレイアウトにボタンが多すぎて、ページが美しくなく、ユーザーエ...

CSSアニメーションがJSによってブロックされるかどうかについての簡単な議論

CSS のアニメーション部分は JS によってブロックされますが、transform のアニメーショ...

タブ切り替えを実装するための HTML サンプル コード

タブ切り替えもプロジェクトではよく使われる技術です。一般的にタブ切り替えはjsやjqを使って実装され...

MySQL 数値型オーバーフローの処理方法

さて、質問させてください。MySQL で列を int(0) に設定すると何が起こりますか?この問題を...

CSS 垂直センタリングの代替実装コードの詳細な説明(非従来型)

序文ご存知のとおり、「CSS で要素を垂直方向に中央揃えするにはどうすればよいか」という質問は、すで...

Nginx リバース プロキシを使用してクロスドメイン問題を解決する方法の詳細な説明

質問前回のクロスドメイン リソース共有に関する記事では、ドメイン間で Cookie を送信する場合、...

5分でDockerをインストールする詳細な手順

CentOS に Docker をインストールするには、オペレーティング システムが CentOS ...

WeChat ミニプログラム 宝くじ番号ジェネレーター

この記事では、WeChatアプレットの宝くじ番号ジェネレータの具体的なコードを参考までに紹介します。...

HTML の順序付きリスト、順序なしリスト、定義リストに関する簡単な説明

順序付きリストXML/HTML コードコンテンツをクリップボードにコピー<オルタイプ= &qu...

mysql 5.7.18 winx64 パスワード変更

MySQL 5.7.18 が正常にインストールされた後、バージョン 5.7 では空のパスワードでのロ...

docker イメージのプル速度が遅い問題の解決策

現在、Docker には中国向けの公式ミラーがあります。詳細については、https://www.do...

Vue 要素と Nuxt の使用に関するヒントを共有する

1. 要素時間選択提出フォーマット変換例えば 2018年9月7日金曜日 00:00:00 GMT+0...

Electronで不規則な形状の透明部分をクリックする実装

目次不規則なフォームの実装透明な部分をクリックする不規則なフォームの実装ここでは円形フォームを実装し...

JavaScriptのスタックとコピーの詳細な説明

目次1. スタックの定義2. JSスタックの調査1. スタックとヒープ2. 基本型と参照型3. 値渡...

Nginx Httpモジュールシリーズにおけるautoindexモジュールの具体的な使用法

ブラウザ モジュールの主な機能は、http リクエスト ヘッダーの「User-Agent」の値とブラ...