最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Spring Boot Oauth2緩存UserDetails到Ehcache

 更新時(shí)間:2018年08月08日 11:11:41   作者:五毛程序員  
這篇文章主要介紹了詳解Spring Boot Oauth2緩存UserDetails到Ehcache,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

在Spring中有一個(gè)類CachingUserDetailsService實(shí)現(xiàn)了UserDetailsService接口,該類使用靜態(tài)代理模式為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默認(rèn)的userCache屬性值為new NullUserCache(),該對(duì)象并未實(shí)現(xiàn)緩存。因?yàn)槲掖蛩闶褂肊hCache來(lái)緩存UserDetails,所以需要使用Spring的EhCacheBasedUserCache類,該類是UserCache接口的實(shí)現(xiàn)類,主要是緩存操作。

緩存UserDetails到Ehcache的具體實(shí)現(xiàn)如下:

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
@Configuration
public 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;
  }
}

使用

@Autowired
private UserDetailsService userDetailsService;

歡迎關(guān)注我的oauthserver項(xiàng)目,僅僅需要運(yùn)行建表sql,修改數(shù)據(jù)庫(kù)的連接配置,即可得到一個(gè)Spring Boot Oauth2 Server微服務(wù)。項(xiàng)目地址https://github.com/jeesun/oauthserver

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringMVC基于阻塞隊(duì)列LinkedBlockingQueue的同步長(zhǎng)輪詢功能實(shí)現(xiàn)詳解

    SpringMVC基于阻塞隊(duì)列LinkedBlockingQueue的同步長(zhǎng)輪詢功能實(shí)現(xiàn)詳解

    這篇文章主要介紹了SpringMVC基于阻塞隊(duì)列LinkedBlockingQueue的同步長(zhǎng)輪詢功能實(shí)現(xiàn)詳解,本文介紹的也是生產(chǎn)者消費(fèi)者的一種實(shí)現(xiàn),生產(chǎn)者不必是一個(gè)始終在執(zhí)行的線程,它可以是一個(gè)接口,接受客戶端的請(qǐng)求,向隊(duì)列中插入消息,需要的朋友可以參考下
    2023-07-07
  • IntelliJ IDEA本地代碼覆蓋后恢復(fù)原來(lái)的代碼圖解

    IntelliJ IDEA本地代碼覆蓋后恢復(fù)原來(lái)的代碼圖解

    今天小編就為大家分享一篇關(guān)于IntelliJ IDEA本地代碼覆蓋后恢復(fù)原來(lái)的代碼圖解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • mybatis-plus添加數(shù)據(jù)時(shí)id自增問(wèn)題及解決

    mybatis-plus添加數(shù)據(jù)時(shí)id自增問(wèn)題及解決

    這篇文章主要介紹了mybatis-plus添加數(shù)據(jù)時(shí)id自增問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot框架DataSource多數(shù)據(jù)源配置方式

    SpringBoot框架DataSource多數(shù)據(jù)源配置方式

    這篇文章主要介紹了SpringBoot框架DataSource多數(shù)據(jù)源配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Java實(shí)現(xiàn)MD5加密算法方法例子

    Java實(shí)現(xiàn)MD5加密算法方法例子

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)MD5加密算法方法的相關(guān)資料,MD5加密是一種常見(jiàn)的加密方式,我們經(jīng)常用在保存用戶密碼和關(guān)鍵信息上,需要的朋友可以參考下
    2023-10-10
  • Springboot全局異常捕獲及try catch區(qū)別解析

    Springboot全局異常捕獲及try catch區(qū)別解析

    這篇文章主要介紹了Springboot全局異常捕獲及try catch區(qū)別解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java抽獎(jiǎng)算法第二例

    Java抽獎(jiǎng)算法第二例

    這篇文章主要為大家詳細(xì)介紹了Java抽獎(jiǎng)算法,根據(jù)概率將獎(jiǎng)品劃分區(qū)間,每個(gè)區(qū)間代表一個(gè)獎(jiǎng)品,然后抽取隨機(jī)數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 關(guān)于@Value注入List,Map及設(shè)置默認(rèn)值問(wèn)題

    關(guān)于@Value注入List,Map及設(shè)置默認(rèn)值問(wèn)題

    這篇文章主要介紹了@Value注入List,Map及設(shè)置默認(rèn)值問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java可變參數(shù)使用示例

    java可變參數(shù)使用示例

    這篇文章主要介紹了java可變參數(shù)使用示例,需要的朋友可以參考下
    2014-04-04
  • Java  解決死鎖的方法實(shí)例詳解

    Java 解決死鎖的方法實(shí)例詳解

    這篇文章主要介紹了java 多線程死鎖詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評(píng)論

宝鸡市| 宜城市| 乡城县| 河间市| 太湖县| 文水县| 疏附县| 冀州市| 长子县| 庄河市| 长顺县| 民勤县| 从江县| 温州市| 芮城县| 禹城市| 柯坪县| 西宁市| 汉源县| 秦安县| 大田县| 南部县| 天等县| 襄城县| 凤山县| 区。| 大英县| 越西县| 图们市| 菏泽市| 晋江市| 彰武县| 青铜峡市| 绥芬河市| 松溪县| 南部县| 巨鹿县| 广宁县| 陇南市| 潍坊市| 布尔津县|