日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

使用Spring Security 5进行密码编码器迁移

發布時間:2023/12/3 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Spring Security 5进行密码编码器迁移 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近,我在一個使用自定義PasswordEncoder的項目中工作,需要將其遷移到bcrypt 。 當前的密碼存儲為hash ,這意味著不可能將其還原為原始的String –至少不是簡單的方法。

這里的挑戰是如何支持兩種實現,舊的哈希解決方案以及新的bcrypt實現。 經過一些研究,我可以找到Spring Security 5的 DelegatingPasswordEncoder 。

認識DelegatingPasswordEncoder

DelegatingPasswordEncoder類可以支持基于前綴的多個password encoders 。 密碼存儲如下:

{bcrypt}$2a$10$vCXMWCn7fDZWOcLnIEhmK.74dvK1Eh8ae2WrWlhr2ETPLoxQctN4. {noop}plaintextpassword

Spring Security 5帶來了方便的PasswordEncoderFactories類,當前該類支持以下編碼器:

public static PasswordEncoder createDelegatingPasswordEncoder() {String encodingId = "bcrypt";Map<String, PasswordEncoder> encoders = new HashMap<>();encoders.put(encodingId, new BCryptPasswordEncoder());encoders.put("ldap", new org.springframework.security.crypto.password.LdapShaPasswordEncoder());encoders.put("MD4", new org.springframework.security.crypto.password.Md4PasswordEncoder());encoders.put("MD5", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("MD5"));encoders.put("noop", org.springframework.security.crypto.password.NoOpPasswordEncoder.getInstance());encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());encoders.put("scrypt", new SCryptPasswordEncoder());encoders.put("SHA-1", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-1"));encoders.put("SHA-256", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-256"));encoders.put("sha256", new org.springframework.security.crypto.password.StandardPasswordEncoder());return new DelegatingPasswordEncoder(encodingId, encoders); }

現在,無需聲明單個PasswordEncoder我們可以使用PasswordEncoderFactories ,例如以下代碼片段:

@Bean public PasswordEncoder passwordEncoder() {return PasswordEncoderFactories.createDelegatingPasswordEncoder(); }

添加自定義編碼器

現在,回到我最初的問題,由于遺留原因,有一個本地的password encoding解決方案,并且方便使用的PasswordEncoderFactories對它一無所知,以解決我已經創建了一個類似于PasswordEncoderFactories的類并添加了所有已構建的類的問題。 -in編碼器和我的自定義編碼器,這是一個示例實現:

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.DelegatingPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder; import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder;import java.util.HashMap; import java.util.Map;class DefaultPasswordEncoderFactories {@SuppressWarnings("deprecation")static PasswordEncoder createDelegatingPasswordEncoder() {String encodingId = "bcrypt";Map<String, PasswordEncoder> encoders = new HashMap<>();encoders.put(encodingId, new BCryptPasswordEncoder());encoders.put("ldap", new org.springframework.security.crypto.password.LdapShaPasswordEncoder());encoders.put("MD4", new org.springframework.security.crypto.password.Md4PasswordEncoder());encoders.put("MD5", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("MD5"));encoders.put("noop", org.springframework.security.crypto.password.NoOpPasswordEncoder.getInstance());encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());encoders.put("scrypt", new SCryptPasswordEncoder());encoders.put("SHA-1", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-1"));encoders.put("SHA-256", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-256"));encoders.put("sha256", new org.springframework.security.crypto.password.StandardPasswordEncoder());encoders.put("custom", new CustomPasswordEncoder());return new DelegatingPasswordEncoder(encodingId, encoders);} }

然后,我使用DefaultPasswordEncoderFactories聲明了@Bean 。

第一次運行后,我意識到另一個問題,我將必須運行一個SQL腳本來更新所有現有的密碼,并添加{custom}前綴,以便框架可以正確地將前綴與正確的PasswordEncoder綁定,不要誤解我的意思。很好的解決方案,但是我真的不想弄亂數據庫中的現有密碼,幸運的是, DelegatingPasswordEncoder類允許我們設置默認的 PasswordEncoder ,這意味著只要框架嘗試在存儲的密碼中找不到前綴,它都會退回default以嘗試對其進行解碼。

然后,我將實現更改為以下內容:

import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.DelegatingPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder; import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder;import java.util.HashMap; import java.util.Map;class DefaultPasswordEncoderFactories {@SuppressWarnings("deprecation")static PasswordEncoder createDelegatingPasswordEncoder() {String encodingId = "bcrypt";Map<String, PasswordEncoder> encoders = new HashMap<>();encoders.put(encodingId, new BCryptPasswordEncoder());encoders.put("ldap", new org.springframework.security.crypto.password.LdapShaPasswordEncoder());encoders.put("MD4", new org.springframework.security.crypto.password.Md4PasswordEncoder());encoders.put("MD5", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("MD5"));encoders.put("noop", org.springframework.security.crypto.password.NoOpPasswordEncoder.getInstance());encoders.put("pbkdf2", new Pbkdf2PasswordEncoder());encoders.put("scrypt", new SCryptPasswordEncoder());encoders.put("SHA-1", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-1"));encoders.put("SHA-256", new org.springframework.security.crypto.password.MessageDigestPasswordEncoder("SHA-256"));DelegatingPasswordEncoder delegatingPasswordEncoder = new DelegatingPasswordEncoder(encodingId, encoders);delegatingPasswordEncoder.setDefaultPasswordEncoderForMatches(new CustomPasswordEncoder());return delegatingPasswordEncoder;}}

@Bean聲明現在是:

@Bean public PasswordEncoder passwordEncoder() {return DefaultPasswordEncoderFactories.createDelegatingPasswordEncoder(); }

結論

遷移密碼編碼器是一個現實生活中的問題, Spring Security 5通過一次支持多個PasswordEncoder提供了一種便捷的方式來輕松處理它。

腳注

  • 本教程使用的代碼可以在GitHub上找到 。
  • DelegatingPasswordEncoder – Spring Docs

翻譯自: https://www.javacodegeeks.com/2019/03/password-encoder-migration-spring-security-5.html

總結

以上是生活随笔為你收集整理的使用Spring Security 5进行密码编码器迁移的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。