gpt4 book ai didi

java - 如何在 Spring 中使用注释定义 PasswordEncoder?

转载 作者:行者123 更新时间:2023-12-01 11:14:44 25 4
gpt4 key购买 nike

我正在使用 Spring-Boot v1.3.0.M2。我正在尝试使用注释定义一个 o.s.s.c.p.PasswordEncoder 。我的配置类如下所示。这个例子运行良好。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public PasswordEncoder getPasswordEncoder() {
return new StandardPasswordEncoder();
}
}

但是,我想用 secret 实例化 StandardPasswordEncoder,并且我已按如下方式修改了我的类。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
@Value(value="${password.secret}")
private String secret;

@Bean
public PasswordEncoder getPasswordEncoder() {
return new StandardPasswordEncoder(secret);
}
}

请注意我的 Spring-Boot 应用程序如下所示。

@SpringBootApplication
@PropertySource("classpath:/config/myapp.properties")
public class Application {
public static void main(String[] args) {
SpringApplications.run(Application.class, args);
}

@Bean
public static PropertySourcesPlaceholderConfigurer getPropertySourcesPlaceholdConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
}

我的 myapp.properties 如下所示。

password.secret=fsdkjfsldfsdfsdfsdf

当我尝试运行 Spring-Boot 应用程序时,出现以下异常。


Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.crypto.password.PasswordEncoder]: Circular reference involving containing bean 'webSecurityConfig' - consider declaring the factory method as static for independence from its containing instance. Factory method 'getPasswordEncoder' threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
... 102 more

无法实例化 PasswordEncoder,因为未设置字段 private String Secret;,因此出现 NullPointerException (NPE)。我尝试将方法 getPasswordEncoder 以及字段 secret 设为静态,但这没有帮助。

关于如何使用注释获取带有 secret 的 PasswordEncoder 实例,有什么想法吗?

最佳答案

bcrypt 密码加密器,Spring recommends通过 SHA 或 MD5,可以这样配置:

@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}

关于java - 如何在 Spring 中使用注释定义 PasswordEncoder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31972426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com