import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.security.core.Authentication;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClient;
import org.springframework.security.oauth2.client.OAuth2AuthorizedClientService;
import org.springframework.stereotype.Service;
@Service
public class RedisOAuth2AuthorizedClientServiceImpl implements OAuth2AuthorizedClientService {
private final static String REDIS_KEY_PATTERN = "my-oauth2authorizedclient:%S:%S";
private final RedisTemplate<String, OAuth2AuthorizedClient> redisTemplate;
public RedisOAuth2AuthorizedClientServiceImpl(RedisConnectionFactory redisConnectionFactory) {
this.redisTemplate = new RedisTemplate();
this.redisTemplate.setConnectionFactory(redisConnectionFactory);
this.redisTemplate.setKeySerializer(new StringRedisSerializer());
this.redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
this.redisTemplate.afterPropertiesSet();
}
@Override
public OAuth2AuthorizedClient loadAuthorizedClient(String clientRegistrationId, String principalName) {
ValueOperations<String, OAuth2AuthorizedClient> valueOperations = redisTemplate.opsForValue();
return (OAuth2AuthorizedClient) valueOperations.get(String.format(REDIS_KEY_PATTERN, clientRegistrationId, principalName));
}
@Override
public void saveAuthorizedClient(OAuth2AuthorizedClient authorizedClient, Authentication principal) {
ValueOperations<String, OAuth2AuthorizedClient> valueOperations = redisTemplate.opsForValue();
valueOperations.set(
String.format(REDIS_KEY_PATTERN, authorizedClient.getClientRegistration().getRegistrationId(), principal.getName()),
authorizedClient
);
}
@Override
public void removeAuthorizedClient(String clientRegistrationId, String principalName) {
redisTemplate.delete(String.format(REDIS_KEY_PATTERN, clientRegistrationId, principalName));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2020-04-11 spring 启动时自动运行
2020-04-11 spring cloud oauth2授权服务 默认tokenService配置源码
2020-04-11 spring cloud 搭建oauth2授权服务 使用redis存储令牌
2020-04-11 spring cloud oauth2授权服务 clientDetails配置源码
2020-04-11 spring 验证框架
2020-04-11 IDEA 插件整理
2020-04-11 spring security笔记 默认登陆页面源码