스프링 시큐리티 2) - 세션기반 + Redis

TreeSick·2022년 4월 13일
0

스프링시큐리티

목록 보기
2/4

1편에서는 스프링시큐리티 세션기반 기본 예제를 작성해보았습니다.

별도의 설정이 없으면, 세션을 HttpSession에 저장하던 것을

이번 예제에서는 Redis를 연결해서 Redis에 Session을 저장하도록 하겠습니다.

이렇게 세션을 관리하는 서버를 따로 두는 것이 유리하다고 합니다.

기본 코드

1편을 기반으로 작성되니, 먼저 1편은 봐주세요~!

build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    implementation 'org.springframework.session:spring-session-data-redis:2.6.1'
}

Redis를 사용하기 위해, 의존성 추가를 해줍니다.

application.properties

spring.redis.host=localhost
spring.redis.port=6379
spring.session.store-type=redis

Redis의 포트번호를 설정해줍니다.

RedisConfig

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 10)
public class RedisConfig {

    @Bean
    public RedisConnectionFactory redisConnectionFactory() {
        return new LettuceConnectionFactory();
    }

}

Lettuce를 사용한 ConnectionFactory Bean 등록.

@EnableRedisHttpSession : springSessionRepositoryFilter라는 이름의 스프링 빈을 만들어 자동으로 세션을 Redis에서 관리하도록 합니다.

그리고 만료시간을 10초로 지정해줍니다.

매우 중요!!

User

@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/

https://somida.tistory.com/188

profile
깃헙에 올린 예제 코드의 설명을 적어놓는 블로그

0개의 댓글