私はSpring OAuth Serverサンプルコードにデータベースを追加しようとしています。 ここにdataSourceの設定があります。Spring OAuthサーバーJBDCTokenStoreエラー
@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、JdbcClientDetailsService作業罰金にエラーが発生します。
エラーメッセージ:java.lang.IllegalArgumentExceptionが:によって引き起こさ
org.springframework.beans.factory.BeanCreationException:データソースは、によって引き起こさ
を必要 エラー名でBeanを作成する 'tokenStore'クラスパスで定義されています リソース [org/springframework/security/oauth/examples/sparklr/config/OAuth2ServerConfig $ AuthorizationServerConfiguration.class]: Beanのインスタンス化に失敗しました。入れ子の例外です org.springframework.beans.factory.BeanDefinitionStoreException: ファクトリメソッド[パブリック org.springframework.security.oauth2.provider.token.TokenStore org.springframework.security.oauth.examples.sparklr.config.OAuth2ServerConfig $ AuthorizationServerConfiguration.tokenStore()] 例外がスローされました。ネストされた例外は java.lang.IllegalArgumentExceptionがある:データソースは、私が起こるかを把握できなかった
を必要としていました。 データベースと表は、すべての罰金です。(私はサンプルを与えたSQLファイルを使用します。)
@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;
}
私はデータソース()、 へと変化するデータソースの下に新しいBeanを追加し、それが動作します。 JdbcClientDetailsServiceがorignalで動作する理由はわかりません。 しかし、JdbcTokenStoreには新しいものが必要です。 どのようにしてこのコード部分を変更できますか?コードは重複したコードのために乱雑に見えます。
'JdbcTokenStore'クラスに' @Configuration'アノテーションがありますか? – harshavmb
いいえ、私はそれの下に重複したコードを追加してエラーを解決します。なぜそれが機能するのかわかりません。 –