SpringCloud微服务——基于security+oauth2的安全保护(四):授权服务之redis存储token

文章目录

    • 加入jar包
    • 加入配置
    • 修改授权服务配置
    • 问题

在 SpringCloud微服务——基于security+oauth2的安全保护(二):授权服务该文中,存储token信息使用的是jdbc的方式。这里介绍一种使用redis存储的方法(本文是建立在 授权服务之上的,以它为基础改造)。
为了多样化,就不删除以前的功能了,可以通过配置来决定使用哪个。

加入jar包

以前的jar包不要动,加入redis的就可以了。


<dependency>
	<groupId>org.springframework.bootgroupId>
	<artifactId>spring-boot-starter-data-redisartifactId>
dependency>

加入配置

在配置文件(或者配置中心)加入配置:(注意:注释和配置不要写在同一行,这里是直接从配置中心拷贝的

#redis链接信息
spring.redis.database=0                        # Redis数据库索引(默认为0)
spring.redis.host=xxxxxxxx                     # Redis服务器地址
spring.redis.port=6379                         # Redis服务器连接端口
spring.redis.password=xxxx                     # Redis服务器连接密码(默认为空)
spring.redis.jedis.pool.max-active=8           # 连接池最大连接数(使用负值表示没有限制)
spring.redis.jedis.pool.max-wait=-1            # 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.jedis.pool.max-idle=8             # 连接池中的最大空闲连接
spring.redis.jedis.pool.min-idle=0             # 连接池中的最小空闲连接
spring.redis.timeout=1000                      # 连接超时时间(毫秒)

#token存储方式
fyk.authorization.token-store=redis			   #token的存储方式,可选值为:redis,jdbc,jwt_sy,jwt_asy;默认为jdbc

修改授权服务配置

在OAuth2AuthorizationConfig类中修改代码如下:
加入配置:主要就是为了接受配置文件中的配置信息,也就是上一步中的fyk.authorization.token-store=reids配置。

/**
 * token的存储方式
 */
@Value("${fyk.authorization.token-store:jdbc}")
private String tokenStore;

然后修改getTokenStore方法:

@Bean
public TokenStore getTokenStore() {
	if(REDIS_STORE.equalsIgnoreCase(tokenStore)){
		RedisTokenStore redisTokenStore = new RedisTokenStore(redisConnectionFactory);
		redisTokenStore.setAuthenticationKeyGenerator(authentication -> "FYK"+UUID.randomUUID().toString().replace("-", ""));
        return redisTokenStore;
	}else {
		JdbcTokenStore jdbcTokenStore = new JdbcTokenStore(dataSource);
		jdbcTokenStore.setAuthenticationKeyGenerator(authentication -> "FYK"+UUID.randomUUID().toString().replace("-", ""));
		return jdbcTokenStore;
	}
}

到这里,启动项目,现在token的存储就不再jdbc了,而是使用了redis。

问题

如果按照上面的步骤来,如果出现了错误:
java.lang.NoSuchMethodError: org.springframework.data.redis.connection.RedisConnection.set([B[B)V
这说明版本有问题,解决方案是,将oauth2的版本升级到2.3.3,即在pom文件中,加入:


<dependency>
	<groupId>org.springframework.cloudgroupId>
	<artifactId>spring-cloud-starter-oauth2artifactId>
dependency>
<dependency>
	<groupId>org.springframework.security.oauthgroupId>
	<artifactId>spring-security-oauth2artifactId>
	
	<version>2.3.3.RELEASEversion>
dependency>

你可能感兴趣的:(SpringCloud微服务——基于security+oauth2的安全保护(四):授权服务之redis存储token)