Java Spring OAuth服务器JBDCTokenStore错误
我正在尝试将数据库添加到SpringOAuth服务器示例代码中。 这是数据源配置Java Spring OAuth服务器JBDCTokenStore错误,java,spring,spring-mvc,spring-security,oauth-2.0,Java,Spring,Spring Mvc,Spring Security,Oauth 2.0,我正在尝试将数据库添加到SpringOAuth服务器示例代码中。 这是数据源配置 @Bean(name = "dataSource") public DriverManagerDataSource dataSource() { DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource(); driverManagerDataSource.setDriverClassName("org
@Bean(name = "dataSource")
public DriverManagerDataSource dataSource() {
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("org.mariadb.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mariadb://localhost:3306/OAuth");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("password");
return driverManagerDataSource;
}
和EndpointConfig
@Autowired
private DataSource dataSource;
@Bean
public JdbcClientDetailsService clientDetailsService() {
return new JdbcClientDetailsService(dataSource);
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.withClientDetails(clientDetailsService());
}
@Bean
public TokenStore tokenStore() {
//return new InMemoryTokenStore();
return new JdbcTokenStore(dataSource);
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints.tokenStore(tokenStore);
endpoints.userApprovalHandler(userApprovalHandler);
endpoints.authenticationManager(authenticationManager);
}
但我在JbdctokenStore上遇到错误,JDBCclientDetails服务工作正常
错误消息:
原因:java.lang.IllegalArgumentException:需要数据源
原因:org.springframework.beans.factory.BeanCreationException:
创建类路径中定义了名为“tokenStore”的bean时出错
资源
[org/springframework/security/oauth/examples/sparkr/config/OAuth2ServerConfig$AuthorizationServerConfiguration.class]:
bean实例化失败;嵌套异常是
org.springframework.beans.factory.BeanDefinitionStoreException:
工厂法[公开]
org.springframework.security.oauth2.provider.token.TokenStore
org.springframework.security.oauth.examples.sparkr.config.OAuth2ServerConfig$AuthorizationServerConfiguration.tokenStore()]
抛出异常;嵌套异常是
java.lang.IllegalArgumentException:需要数据源
我不知道发生了什么。
数据库和表都很好。(我使用示例提供的sql文件。)
我只是在它下面添加了一个新bean,并将dataSource更改为dataSource(), 而且它起作用了。 我不明白,为什么JdbcClientDetailsService要和原始版本一起工作。 但是JdbcTokenStore需要一个新的。
如何更改这部分代码,由于代码重复,代码看起来很凌乱。尝试使用
@Primary
标记数据源bean。请参阅此处的更多详细信息:您是否在JdbcTokenStore
类上有@Configuration
注释?没有,但我通过在其下添加重复代码来解决此错误。我不知道它为什么起作用。
@Bean
public TokenStore tokenStore() {
//return new InMemoryTokenStore();
return new JdbcTokenStore(dataSource());
}
@Bean
public DriverManagerDataSource dataSource() {
DriverManagerDataSource driverManagerDataSource = new DriverManagerDataSource();
driverManagerDataSource.setDriverClassName("org.mariadb.jdbc.Driver");
driverManagerDataSource.setUrl("jdbc:mariadb://localhost:3306/OAuth");
driverManagerDataSource.setUsername("root");
driverManagerDataSource.setPassword("a89019");
return driverManagerDataSource;
}