Spring Boot Security认证:Redis缓存用户信息
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.provisioning.JdbcUserDetailsManager;
@Configuration
public class SecurityConfig {
@Bean
public UserDetailsService userDetailsService(RedisTemplate<String, UserDetails> userRedisTemplate) {
return username -> {
// 尝试从缓存中获取用户信息
UserDetails user = userRedisTemplate.opsForValue().get(username);
if (user == null) {
// 缓存中没有,则从数据库或其他数据源查询用户信息
// 这里为了示例,我们使用静态数据模拟用户信息
user = User.withDefaultPasswordEncoder()
.username(username)
.password("password")
.roles("USER")
.build();
// 将用户信息存入缓存
userRedisTemplate.opsForValue().set(username, user);
}
return user;
};
}
@Bean
public RedisTemplate<String, UserDetails> userRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, UserDetails> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}
这段代码定义了一个UserDetailsService
的Bean,该Bean使用Redis作为缓存用户信息的数据源。当用户登录时,首先会尝试从Redis缓存中获取用户信息。如果缓存中没有,则会从数据库或其他数据源查询用户信息,并将其存入缓存,以便下次快速访问。这样可以提高应用程序的性能并减少数据库的负担。
评论已关闭