ClientDetailsService 在身份验证期间被调用 6 次
ClientDetailsService gets called 6 times during authentication
我们为 OAuth2 授权服务器编写了自定义 ClientDetailsService:
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)
我的问题是,有人知道这个问题的解决方法吗?每次调用我们都在访问我们的数据库,这非常消耗内存。
你需要使用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!");
...
}
}
我们为 OAuth2 授权服务器编写了自定义 ClientDetailsService:
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)
我的问题是,有人知道这个问题的解决方法吗?每次调用我们都在访问我们的数据库,这非常消耗内存。
你需要使用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!");
...
}
}