目录
1.首先来看一下PersistentTokenRepository接口
2.PersistentTokenRepository的实现
3.1PersistentTokenRepository实现之一InMemoryTokenRepositoryImpl
3.2PersistentTokenRepository实现之二JdbcTokenRepositoryImpl
(2)自定义MyPersistentRememberMeToken
(3)自定义myPersistentTokenRepository实现PersistentTokenRepository接口
一:记住我功能的Token持久化
在(一)中,我们将“记住我功能”放入数据库,进行数据持久化。主要步骤如下,我们看一下具体的:
1.新建数据表结构
2.使用JdbcTemplate来存储生成的Token
二:记住我功能的源码解析
1.首先来看一下PersistentTokenRepository接口
这个接口定义的功能很明了,Token的Crud
2.PersistentTokenRepository的实现
这个接口有2个实现类,如图所示:
3.1PersistentTokenRepository实现之一InMemoryTokenRepositoryImpl
这个是Token的默认的存储方式,使用了内存的方式存储。我们来看一下结构:
(1)定义一个内存存储的Map
(2)定义一个根据主键查询Tokne的同步方法
说明一下,这里为什么要在方法加锁呢?保证同时只能有一个线程读取。
public synchronized PersistentRememberMeToken getTokenForSeries(String seriesId) {
return seriesTokens.get(seriesId);
}
(3)创建Token
public synchronized void createNewToken(PersistentRememberMeToken token) {
PersistentRememberMeToken current = seriesTokens.get(token.getSeries());
if (current != null) {
throw new DataIntegrityViolationException("Series Id '" + token.getSeries()
+ "' already exists!");
}
seriesTokens.put(token.getSeries(), token);
}
来看一下这个PersistenToken中有哪些属性:
(4)更新Token
public synchronized void updateToken(String series, String tokenValue, Date lastUsed) {
PersistentRememberMeToken token = getTokenForSeries(series);