fix(core): 完善编码器配置校验

* 解决List<PasswordEncoder> 循环依赖问题
* 对用户选择的编码器做校验
This commit is contained in:
jasmine
2024-01-31 02:16:44 +00:00
committed by Charles7c
parent ab8c1aec2f
commit e1b7fea24f

View File

@@ -30,6 +30,7 @@ import org.springframework.security.crypto.factory.PasswordEncoderFactories;
import org.springframework.security.crypto.password.*; import org.springframework.security.crypto.password.*;
import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder; import org.springframework.security.crypto.scrypt.SCryptPasswordEncoder;
import top.charles7c.continew.starter.core.constant.PropertiesConstants; import top.charles7c.continew.starter.core.constant.PropertiesConstants;
import top.charles7c.continew.starter.core.util.validate.CheckUtils;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@@ -55,12 +56,9 @@ import java.util.Map;
public class PasswordEncoderAutoConfiguration { public class PasswordEncoderAutoConfiguration {
private final PasswordEncoderProperties properties; private final PasswordEncoderProperties properties;
private final List<PasswordEncoder> passwordEncoderList;
public PasswordEncoderAutoConfiguration(PasswordEncoderProperties properties, public PasswordEncoderAutoConfiguration(PasswordEncoderProperties properties) {
List<PasswordEncoder> passwordEncoderList) {
this.properties = properties; this.properties = properties;
this.passwordEncoderList = passwordEncoderList;
} }
/** /**
@@ -70,7 +68,7 @@ public class PasswordEncoderAutoConfiguration {
* @see PasswordEncoderFactories * @see PasswordEncoderFactories
*/ */
@Bean @Bean
public PasswordEncoder passwordEncoder() { public PasswordEncoder passwordEncoder(List<PasswordEncoder> passwordEncoderList) {
String encodingId = "bcrypt"; String encodingId = "bcrypt";
if (StrUtil.isNotBlank(properties.getEncodingId())) { if (StrUtil.isNotBlank(properties.getEncodingId())) {
encodingId = properties.getEncodingId(); encodingId = properties.getEncodingId();
@@ -98,6 +96,7 @@ public class PasswordEncoderAutoConfiguration {
.getSimpleName() .getSimpleName()
.toLowerCase(), passwordEncoder)); .toLowerCase(), passwordEncoder));
} }
CheckUtils.throwIf(!encoders.keySet().contains(encodingId), "所填 [{}] 密码编码器不存在!", encodingId);
return new DelegatingPasswordEncoder(encodingId, encoders); return new DelegatingPasswordEncoder(encodingId, encoders);
} }