无法从应用程序读取属性.在定制/重写ClientRegistrationRepository时 &g



我正在尝试实现本文档中提到的定制客户端存储库。

https://docs.spring.io/spring-security/site/docs/5.0.x/reference/html/jc.html jc-oauth2login-completely-override-autoconfiguration

根据文档,属性在代码中硬编码,我试图从application.yml读取这些属性。但是,当需要设置属性时,属性不可用。

任何指针如何实现这一点?如何提出申请。

Application.yml:

sso:
enabled: true
registrationId: myApp
clientName: myApp
.....

对应于sso属性的POJO

@Data
@ConfigurationProperties("sso")
public class SsoPropertiesConfig {
private boolean enabled;
private String clientName;
private String registrationId;
....

Websecurity配置

@Slf4j
@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
public class OAuth2LoginSecurityConfig extends WebSecurityConfigurerAdapter {
SsoPropertiesConfig ssoPropertiesConfig = new SsoPropertiesConfig();
private final PasswordResolver passwordResolver;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.oauth2Login();
}

@Bean
public ClientRegistrationRepository clientRegistrationRepository() {
return new InMemoryClientRegistrationRepository(this.myClientRegistration());
}
private ClientRegistration myClientRegistration() {
log.info("ssoPropertiesConfig :{}",ssoPropertiesConfig); 

//ssoPropertiesConfig的所有属性都是NULL

return ClientRegistration.withRegistrationId(ssoPropertiesConfig.getRegistrationId())
.clientName(ssoPropertiesConfig.getClientName())
....
.build();
}
}

您正在使用new创建自己的属性,而不是让spring使用依赖注入来管理它们。

代码:

SsoPropertiesConfig ssoPropertiesConfig = new SsoPropertiesConfig();

你可以删除new声明,因为你已经用@RequiredArgsConstructor注释了你的类

所以保持:

private SsoPropertiesConfig ssoPropertiesConfig;

您需要在您想要使用它的地方注入SsoPropertiesConfig,但是您将它创建为POJO而不是Spring bean。

你可以像这样使用@Autowired注释

@Autowired
SsoPropertiesConfig ssoPropertiesConfig;

或者就像你有一个需要参数的构造函数一样,你可以把它作为最后一个字段:

private final  SsoPropertiesConfig ssoPropertiesConfig; 

注意:必须使用final

相关内容

  • 没有找到相关文章

最新更新