【问题标题】:Wiring ClientRegistrationService with jdbc datasource使用 jdbc 数据源连接 ClientRegistrationService
【发布时间】:2017-11-01 22:34:17
【问题描述】:

我可以使用以下配置成功地将 jdbc 数据源设置为 Spring OAuth2。但是,我正在努力连接ClientRegistrationService,而连接ClientDetailsService 很容易。

@Configuration
@EnableAuthorizationServer
protected static class OAuth2AuthorizationConfig extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private DataSource dataSource;

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.jdbc(dataSource);
    }
    .....
}

这是我尝试过的

  1. 下面的代码找不到ClientDetailsService不是instanceofassignableFromJdbcClientDetailsServiceClientRegistrationService

    @控制器 公共类 ClientPortalApplication {

    private ClientRegistrationService clientService;
    
    @Autowired
    public void setClientDetailsService(ClientDetailsService clientDetailsService) {
        if (clientDetailsService instanceof JdbcClientDetailsService)) {
            clientService = (ClientRegistrationService) clientDetailsService;
        }
    }
    ......
    

    }

  2. 在找到ClientRegistrationService 类型的 bean 时,以下代码接线失败

@Controller
public class ClientPortalApplication {

    @Autowired
    private ClientRegistrationService clientService;

    ......
}

【问题讨论】:

    标签: spring oauth spring-security


    【解决方案1】:

    在yout AuthorizationServerConfigurerAdapter 中创建的ClientDetailsService 不是bean,因此无法注入。一个解决方案是创建一个 bean JdbcClientDetailsService 将其注入到 AuthorizationServerConfigurerAdapter 中,然后您就可以在其他任何地方注入它:

    @Configuration
    public class MyConfiguration {
        @Autowired
        private DataSource dataSource;
        @Bean
        public JdbcClientDetailsService jdbcClientDetailsService() {
            return new JdbcClientDetailsService(dataSource);
        }
    
        @Configuration
        @EnableAuthorizationServer
        protected class OAuth2AuthorizationConfig extends AuthorizationServerConfigurerAdapter {
            @Autowired
            private JdbcClientDetailsService jdbcClientDetailsService;
            public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
                clients.withClientDetails(jdbcClientDetailsService);
            }
        }    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 2013-04-13
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多