从零开始java安全权限框架篇(三):记住我Token存储的源码解析以及自定义Token存储

目录

一:记住我功能的Token持久化

1.新建数据表结构

2.使用JdbcTemplate来存储生成的Token

二:记住我功能的源码解析

1.首先来看一下PersistentTokenRepository接口

2.PersistentTokenRepository的实现

3.1PersistentTokenRepository实现之一InMemoryTokenRepositoryImpl

 (1)定义一个内存存储的Map

          (2)定义一个根据主键查询Tokne的同步方法

(3)创建Token

(4)更新Token

 (5)删除Token

3.2PersistentTokenRepository实现之二JdbcTokenRepositoryImpl

三:自定义实现记住我功能的持久化

1.为什么要自定义持久化

2.如何持久化

3.实现自定义持久化

(1)定义好RedisConfig并且完成工具类

(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);
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值