麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

詳解Spring Boot Oauth2緩存UserDetails到Ehcache

2024-07-14 08:41:58
字體:
來源:轉載
供稿:網友

在Spring中有一個類CachingUserDetailsService實現了UserDetailsService接口,該類使用靜態代理模式為UserDetailsService提供緩存功能。該類源碼如下:

CachingUserDetailsService.java

public class CachingUserDetailsService implements UserDetailsService {  private UserCache userCache = new NullUserCache();  private final UserDetailsService delegate;  CachingUserDetailsService(UserDetailsService delegate) {    this.delegate = delegate;  }  public UserCache getUserCache() {    return this.userCache;  }  public void setUserCache(UserCache userCache) {    this.userCache = userCache;  }  public UserDetails loadUserByUsername(String username) {    UserDetails user = this.userCache.getUserFromCache(username);    if (user == null) {      user = this.delegate.loadUserByUsername(username);    }    Assert.notNull(user, "UserDetailsService " + this.delegate + " returned null for username " + username + ". This is an interface contract violation");    this.userCache.putUserInCache(user);    return user;  }}

CachingUserDetailsService默認的userCache屬性值為new NullUserCache(),該對象并未實現緩存。因為我打算使用EhCache來緩存UserDetails,所以需要使用Spring的EhCacheBasedUserCache類,該類是UserCache接口的實現類,主要是緩存操作。

緩存UserDetails到Ehcache的具體實現如下:

ehcache.xml

<?xml version="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"     xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd">  <!-- 磁盤緩存位置 -->  <diskStore path="java.io.tmpdir" />  <cache name="userCache"      maxElementsInMemory="0"      eternal="true"      overflowToDisk="true"      diskPersistent="true"      memoryStoreEvictionPolicy="LRU">  </cache></ehcache>

UserDetailsCacheConfig.java

@Slf4j@Configurationpublic class UserDetailsCacheConfig {  @Autowired  private CustomUserDetailsService customUserDetailsService;  @Bean  public UserCache userCache(){    try {      EhCacheBasedUserCache userCache = new EhCacheBasedUserCache();      val cacheManager = CacheManager.getInstance();      val cache = cacheManager.getCache("userCache");      userCache.setCache(cache);      return userCache;    } catch (Exception e) {      e.printStackTrace();      log.error(e.getMessage());    }    return null;  }  @Bean  public UserDetailsService userDetailsService(){    Constructor<CachingUserDetailsService> ctor = null;    try {      ctor = CachingUserDetailsService.class.getDeclaredConstructor(UserDetailsService.class);    } catch (NoSuchMethodException e) {      e.printStackTrace();    }    Assert.notNull(ctor, "CachingUserDetailsService constructor is null");    ctor.setAccessible(true);    CachingUserDetailsService cachingUserDetailsService = BeanUtils.instantiateClass(ctor, customUserDetailsService);    cachingUserDetailsService.setUserCache(userCache());    return cachingUserDetailsService;  }}

使用

@Autowiredprivate UserDetailsService userDetailsService;

歡迎關注我的oauthserver項目,僅僅需要運行建表sql,修改數據庫的連接配置,即可得到一個Spring Boot Oauth2 Server微服務。項目地址https://github.com/jeesun/oauthserver

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 天天草夜夜骑 | 特色一级黄色片 | 在线a毛片免费视频观看 | 羞羞网站视频 | 欧美日韩亚洲一区二区三区 | 国产精品9191 | 91热久久免费频精品黑人99 | 一区二区久久电影 | 日本在线观看视频网站 | 国产精品亚洲一区二区三区在线观看 | 精品国产一区二区三区四区在线 | 久久精品re | 欧美特黄a| 欧美性激情视频 | 久久综合久久精品 | 最新毛片在线观看 | 国产成人高清成人av片在线看 | 亚洲视频在线观看免费视频 | 少妇一级淫片免费看 | 毛片免费在线观看 | 黑人一级片视频 | 国产成人精品一区二区视频免费 | 日本在线国产 | 成年人免费黄色片 | 新久草在线视频 | 成人国产精品免费 | 九九精品在线观看 | 成人免费国产 | 国产精品久久久久久久av | 欧美成人一区二区视频 | 亚洲精品一区二区三区大胸 | 日韩黄色一级视频 | 欧美人一级淫片a免费播放 久久久久久久久91 国产99久久久久久免费看 | 国产午夜精品久久久久 | 免费国产人成网站 | javhdfreejaⅴhd | 成年人精品视频 | 在线观看中文字幕av | 全网免费毛片 | 久久国产精| 久久久精品福利 |