我试图将我的应用程序配置为从属性文件中提取访问权限并刷新令牌到期时间,而不是在Java配置中进行设置。但是,它没有选择它们,而是恢复为默认值。

这是我的Java配置示例,其中我手动设置了到期值。当我这样做时,这很好用。

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

    ....

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
                .withClient("myclient")
                .secret("mysecret")
                .authorizedGrantTypes("password", "refresh_token")
                .scopes("my-app")
                .autoApprove("my-app")
                .accessTokenValiditySeconds(30)
                .refreshTokenValiditySeconds(3200);
    }
}


但是,当我尝试像这样在application.properties文件中设置它们时,它不起作用。

# Security
security.oauth2.client.access-token-validity-seconds=60
security.oauth2.client.refresh-token-validity-seconds=3200

最佳答案

我希望这个回复不晚...

我遇到同样的问题,后来发现这是一个错误。

对于ClientDetailsS​​ervice的自动连线,有一个例外:

Method threw 'org.springframework.beans.factory.BeanCreationException' exception. Cannot evaluate com.sun.proxy.$Proxy135.toString()


因此clientDetailsS​​ervice的值为null。然后它将使用默认值,因此config类中的值设置无效。但是,如果您在application.yml中执行此操作,它将在不检查clientDetailsS​​ervice的情况下设置此值,因此它可以工作。

我已经向团队报告了此问题,希望有人可以解决此错误。
https://github.com/spring-projects/spring-security-oauth/issues/1448

可能的解决方案是在application.yml文件中设置值,或者在DefaultTokenServices中设置值,如下所示:

@Bean
@Primary
public DefaultTokenServices tokenServices() {
    DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
    defaultTokenServices.setTokenStore(this.tokenStore());
    defaultTokenServices.setSupportRefreshToken(true);
    defaultTokenServices.setTokenEnhancer(this.accessTokenConverter());
    defaultTokenServices.setAccessTokenValiditySeconds(100);
    return defaultTokenServices;
}

10-05 19:48