ClientDetailsService java 在 AuthorizationServerConfigurerAdapter 之外配置
ClientDetailsService java config outside AuthorizationServerConfigurerAdapter
我正在尝试将所有环境特定的 bean 等分组 classes 并且我在 OAuth2 类型的应用程序中遇到 ClientDetailsService 问题。
@Configuration
@EnableAuthorizationServer
protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
...
@Autowired
private ClientDetailsService clientDetailsService;
...
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.withClientDetails( clientDetailsService );
}
}
然后我有一个单独的配置 class 像这样:
@Configuration
@Profile(value={"default"})
public class DevConfiguration {
...
@Bean
public ClientDetailsService clientDetailsService() {
return new InMemoryClientDetailsService();
}
@Bean
public UserDetailsService userDetailsService() {
return new InMemoryUserDetails();
}
...
}
然后我将有一个 ProductionConfiguration
class 使用 JDBC 实现等所有这些服务。这个想法是 AuthorizationServerConfiguration
有很多适用于所有环境的东西(令牌增强器、端点配置等)所以我想避免 copy/pasting 所有这些代码。
问题是我的 public ClientDetailsService clientDetailsService()
没有被调用,AuthorizationServerConfiguration
中的 @Autowired clientDetailsService
似乎被代理了,就像它没有找到创建 [=18= 实例的代码一样].
当应用程序通过 id 加载客户端详细信息时,我最终得到一个 WhosebugError
(猜测代理正在调用自己)。
我可以看到其他@Bean 正在从 DevConfiguration
实例化(如 UserDetailsService
),因此在配置应用程序时肯定会考虑 class。我也非常想避免使用限定符。
我做错了什么?
从 AuthorizationServerConfigurerAdapter
等到 "externalize" 数据存储等的最佳方法是什么?
感谢您的帮助!
我的 AuthorizationServerConfiguration
实际上在另一个 @Configuration
class 里面。
结果是将 AuthorizationServerConfiguration
移动到它自己的文件中解决了问题。
我正在尝试将所有环境特定的 bean 等分组 classes 并且我在 OAuth2 类型的应用程序中遇到 ClientDetailsService 问题。
@Configuration
@EnableAuthorizationServer
protected static class AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
...
@Autowired
private ClientDetailsService clientDetailsService;
...
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.withClientDetails( clientDetailsService );
}
}
然后我有一个单独的配置 class 像这样:
@Configuration
@Profile(value={"default"})
public class DevConfiguration {
...
@Bean
public ClientDetailsService clientDetailsService() {
return new InMemoryClientDetailsService();
}
@Bean
public UserDetailsService userDetailsService() {
return new InMemoryUserDetails();
}
...
}
然后我将有一个 ProductionConfiguration
class 使用 JDBC 实现等所有这些服务。这个想法是 AuthorizationServerConfiguration
有很多适用于所有环境的东西(令牌增强器、端点配置等)所以我想避免 copy/pasting 所有这些代码。
问题是我的 public ClientDetailsService clientDetailsService()
没有被调用,AuthorizationServerConfiguration
中的 @Autowired clientDetailsService
似乎被代理了,就像它没有找到创建 [=18= 实例的代码一样].
当应用程序通过 id 加载客户端详细信息时,我最终得到一个 WhosebugError
(猜测代理正在调用自己)。
我可以看到其他@Bean 正在从 DevConfiguration
实例化(如 UserDetailsService
),因此在配置应用程序时肯定会考虑 class。我也非常想避免使用限定符。
我做错了什么?
从 AuthorizationServerConfigurerAdapter
等到 "externalize" 数据存储等的最佳方法是什么?
感谢您的帮助!
我的 AuthorizationServerConfiguration
实际上在另一个 @Configuration
class 里面。
结果是将 AuthorizationServerConfiguration
移动到它自己的文件中解决了问题。