Хей,
Я пытаюсь реализовать OAuth2 в приложении с помощью Spring-Boot. Я борюсь с реализацией JdbcTokenStore (правильно ли я понял это, чтобы хранить токен в базе данных?)
Мой код выглядит следующим образом:
@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends AuthorizationServerConfigurerAdapter {
@Autowired
private DataSource dataSource;
private TokenStore tokenStore = new JdbcTokenStore(dataSource);
....
@Override
public void configure(OAuth2AuthorizationServerConfigurer oauthServer) throws Exception {
oauthServer.tokenStore(tokenStore).authenticationManager(authenticationManager);
}
Выполняя это, я получаю следующую ошибку:
Вызвано: org.springframework.beans.BeanInstantiationException: не удалось создать экземпляр класса bean [se..... config.OAuth2ServerConfig $ OAuth2Config $$ EnhancerBySpringCGLIB $$ f6b9ba94]: конструктор сделал исключение; Вложенное исключение - java.lang.IllegalArgumentException: требуется DataSource
Кажется, что соединение с базой данных работает, по крайней мере, я могу войти в систему с данными пользователя (имя пользователя/пароль), хранящиеся в базе данных, когда я использую InMemoryTokenStore.
Может ли кто-нибудь сказать мне, что я делаю неправильно, или рекомендовать источники, где хорошие примеры для этой проблемы?
Большое спасибо!
Это основная проблема инъекции зависимостей (ничто не кажется и ничто oauth- или Boot- не связано). Вы не можете инициализировать поле из @Autowired
(проводка происходит после инициализации). Вам нужно вытащить это в @PostConstruct
или @Bean
.