gpt4 book ai didi

详解Spring Boot Oauth2缓存UserDetails到Ehcache

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章详解Spring Boot Oauth2缓存UserDetails到Ehcache由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

在spring中有一个类cachinguserdetailsservice实现了userdetailsservice接口,该类使用静态代理模式为userdetailsservice提供缓存功能。该类源码如下:

cachinguserdetailsservice.java 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?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 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@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;
   }
}

使用 。

?
1
2
@autowired
private userdetailsservice userdetailsservice;

欢迎关注我的oauthserver项目,仅仅需要运行建表sql,修改数据库的连接配置,即可得到一个spring boot oauth2 server微服务。项目地址 https://github.com/jeesun/oauthserver 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

原文链接:http://www.cnblogs.com/rainmer/p/9417108.html 。

最后此篇关于详解Spring Boot Oauth2缓存UserDetails到Ehcache的文章就讲到这里了,如果你想了解更多关于详解Spring Boot Oauth2缓存UserDetails到Ehcache的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com