Table of Contents
Auth Server Session 정보 Redis 에 저장
Redis 활성화
build.gradle
......
dependencies {
// ......
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.session:spring-session-data-redis'
// ......
}
......
application.yml
spring:
redis:
cluster:
nodes: 127.0.01:6379
session:
store-type: redis
server:
port: 9000
servlet:
session:
timeout: 43200m # 60m * 24h * 30d
cookie:
max-age: 43200m # 60m * 24h * 30d
name: AUTHSID
http-only: true
# secure: true
RedisConfig.java
@RequiredArgsConstructor
@Configuration
@EnableRedisRepositories
public class RedisConfig {
private final RedisProperties redisProperties;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(redisProperties.getHost(), redisProperties.getPort());
}
@Bean
public RedisTemplate<?, ?> redisTemplate() {
RedisTemplate<byte[], byte[]> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
Session 정보 Redis 에 저장
SessionConfig.java
@Configuration
public class SessionConfig implements BeanClassLoaderAware {
private ClassLoader loader;
@Bean
public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
return new GenericJackson2JsonRedisSerializer(objectMapper());
}
private ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.registerModules(SecurityJackson2Modules.getModules(this.loader));
return mapper;
}
@Override
public void setBeanClassLoader(ClassLoader classLoader) {
this.loader = classLoader;
}
}
Entity Deserializer 생성
UserDeserializer.java
public class UserDeserializer extends JsonDeserializer<User> {
@Override
public User deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
ObjectCodec objectCodec = jsonParser.getCodec();
JsonNode node = objectCodec.readTree(jsonParser);
return User.builder()
.userId(node.get("userId").longValue())
.email(node.get("email").asText())
.password(node.get("password").asText())
.firstName(node.get("firstName").asText())
.lastName(node.get("lastName").asText())
.roles(node.get("roles").asText())
.build();
}
}
@JsonDeserialize(using = UserDeserializer.class)
@Builder
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "tbl_user")
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private long userId;
// ......
}