Реализация JdbcTokenStore с использованием Spring-Boot и OAuth2

1

Хей,

Я пытаюсь реализовать 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.

Может ли кто-нибудь сказать мне, что я делаю неправильно, или рекомендовать источники, где хорошие примеры для этой проблемы?

Большое спасибо!

Теги:
spring-boot
spring-security
spring
oauth-2.0

1 ответ

1

Это основная проблема инъекции зависимостей (ничто не кажется и ничто oauth- или Boot- не связано). Вы не можете инициализировать поле из @Autowired (проводка происходит после инициализации). Вам нужно вытащить это в @PostConstruct или @Bean.

  • 0
    DataSource () определяется в другом классе конфигурации как @Bean. Я думал, что смогу получить к нему доступ позже с @Autowired?
  • 0
    Вы можете, но не можете использовать его в инициализаторе поля. Просто вытащить создание магазина токенов в метод.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню