up:: 数据库管理

super security提供了一个实现了可以缓存userDetailService的实现类。这个类的名字叫做catchingUser DetailsService,我们一起来看一下它的代码实现。

该类的构造接收了一个用于真正加载userDetails的userDetailsService实现类,当需要加载userDetails时,会首先从缓存中获取。如果缓存中没有对应的userDetails存在,则使用持有的userDetailsService实现类进行加载。然后将加载后的结果存放在缓存中

默认拥有userCatch的一个空引用实现。叫做NullUserCache,我们可以看到当缓存中不存在对应的userDetails时,将使用引用的userDetailsService类型的delegate进行加载。加载后再把它存放到cache中并进行返回。除了NullUserCache之外,spring security还为我们提供了一个基于EHcache的userService的实践类。

我们将不只是缓存userCache,还会缓存用户相关的权限以及权限相关的一些信息,我们使用的也不只是内存级别的cache和EHcache。我们还会选择Redis cache,JAVA cache等来做权限缓存。我们会在后面的课程里实际使用缓存时对这三种缓存组件儿做一个对比。实际项目在做权限控制时,我们一般会选择自己去对相关的数据进行缓存。