ClientDetailsService вызывается 6 раз во время аутентификации - PullRequest
0 голосов
/ 13 марта 2019

Мы написали пользовательскую службу ClientDetailsService для нашего сервера авторизации OAuth2:

public class MyClientDetailsService implements ClientDetailsService {

 @Override
 public ClientDetails loadClientByClientId(String clientId) {
 log.info("Got called!");
 ...
 }
}

Лог выглядит так:

... Got called!
... Got called!
... Got called!
... Got called!
... Got called!
... Got called!

Зависимость:

    <dependency>
        <groupId>org.springframework.security.oauth</groupId>
        <artifactId>spring-security-oauth2</artifactId>
        <version>2.1.11.RELEASE</version>
    </dependency>

В официальном git-hub тема уже обсуждалась, но до сегодняшнего дня ничего не было исправлено. (https://github.com/spring-projects/spring-security-oauth/issues/141)

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

1 Ответ

1 голос
/ 29 марта 2019

вам нужно использовать кеш, предоставляемый spring-boot2.

, пожалуйста, включите кэширование в springboot на @ EnableCaching

@SpringBootApplication
@EnableCaching
class Starter {
   public static void main(String[] args) {
      SpringApplication.run(Starter.class, args);
   }
}

затем кэшируйте loadClientByClientId с помощью @Cacheable.

public class MyClientDetailsService implements ClientDetailsService {

  @Override
  @Cacheable("ClientDetails")
  public ClientDetails loadClientByClientId(String clientId) {
    log.info("Got called!");
    ...
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...