如何从属性文件加载ClientCredentialsResourceDetails所需参数

时间:2019-06-28 21:31:48

标签: java spring spring-boot spring-security

我正在尝试从如下所示的属性文件中加载必需的参数,例如accessURI,client_id,client_secret。它从不加载属性,我看到很多站点都以示例为例。如果我尝试对其进行显式设置,则它可以正常工作。

在此示例中 https://dzone.com/articles/build-a-spring-boot-app-with-secure-server-to-serv

@Bean()
    @ConfigurationProperties(prefix ="my.oauth2.client")
    protected ClientCredentialsResourceDetails oAuthDetails() {
        return  ClientCredentialsResourceDetails();

但是它从来没有加载属性,所以我需要更改为使用set方法。我无法弄清楚为什么它没有加载,我相信我无法在@EnableConfigurationProperties中提及这一点,因为它没有配置配置。

我尝试搜索,但找不到匹配的原因。

1 个答案:

答案 0 :(得分:0)

基本上,属性与类成员的绑定如示例中所述。

属性必须以YAML或属性文件的形式出现:

spring:
  security:
   oauth2:
    client:
      registration:
        oauth:
          client-id: XXXXXX
          client-secret: YYYYYYY
          scope: openid
          redirect-uri: http://redirect
          access-token-uri: https://token
          client-authentication-method: basic
          authorization-grant-type: client_credentials

然后必须使用正确的前缀声明@ConfigurationProperties批注。在此示例中为“ spring.security.oauth2.client.registration.oauth”。

@Bean
@ConfigurationProperties(prefix ="spring.security.oauth2.client.registration.oauth")
protected ClientCredentialsResourceDetails oAuthDetails() {
    return new ClientCredentialsResourceDetails();
}

Spring Boot documentation中所述,除非您正在开发自己的自动配置,否则通常不必设置@EnableConfigurationProperties注释。

但是,如果您正在非Spring Boot项目上工作,则必须声明@EnableConfigurationProperties注释,描述我们要在其中使用@ConfigurationProperties注释的类:

@Configuration()
@EnableConfigurationProperties(MyProperties.class)
public class MyConfig {

}

使用

@ConfigurationProperties(prefix="myproperties")
public class MyProperties {

}

或者,您也可以使用配置属性扫描,它通过声明@ConfigurationPropertiesScan批注来与组件扫描类似:

@SpringBootApplication
@ConfigurationPropertiesScan({ "my.app" })
public class MyApplication {
}

希望,这会有所帮助。佩罗