1편에서는 스프링시큐리티 세션기반 기본 예제를 작성해보았습니다.
별도의 설정이 없으면, 세션을 HttpSession에 저장하던 것을
이번 예제에서는 Redis를 연결해서 Redis에 Session을 저장하도록 하겠습니다.
이렇게 세션을 관리하는 서버를 따로 두는 것이 유리하다고 합니다.
1편을 기반으로 작성되니, 먼저 1편은 봐주세요~!
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.session:spring-session-data-redis:2.6.1'
}
Redis를 사용하기 위해, 의존성 추가를 해줍니다.
spring.redis.host=localhost
spring.redis.port=6379
spring.session.store-type=redis
Redis의 포트번호를 설정해줍니다.
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 10)
public class RedisConfig {
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory();
}
}
Lettuce를 사용한 ConnectionFactory Bean 등록.
@EnableRedisHttpSession : springSessionRepositoryFilter라는 이름의 스프링 빈을 만들어 자동으로 세션을 Redis에서 관리하도록 합니다.
그리고 만료시간을 10초로 지정해줍니다.
매우 중요!!
@Entity
@Getter
@NoArgsConstructor
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = false, unique = true)
private String nickname;
@Column(nullable = false)
private String password;
.
.
.
.
.
.
}
회원정보를 저장하는 model이나 dto가 있다면
implements Serializable 를 꼭 해줘야 합니다.
로그인 후, Redis를 확인해보면 세션이 저장된 것을 알 수 있습니다.
그리고 설정한 10초 + 5분이 지나면 세션이 만료되어 자동 삭제됩니다.
https://springboot.tistory.com/13
https://devwithpug.github.io/devops/spring-security-with-redis/