[java] Remember Me 인증 기능

웹 애플리케이션에서 사용자의 인증을 지속적으로 유지하기 위해 “Remember Me” 기능을 구현하는 방법에 대해 알아보겠습니다.

1. Remember Me 기능의 동작 방식

Remember Me 기능은 사용자가 로그인한 후, 웹 브라우저를 종료하고 다시 접속했을 때 자동으로 로그인 상태를 유지해 줍니다. 이를 위해 아래와 같은 동작 방식을 사용합니다.

  1. 사용자가 로그인을 성공적으로 완료하면, 서버는 사용자를 식별할 수 있는 토큰을 생성합니다.
  2. 생성된 토큰은 사용자의 웹 브라우저에 저장됩니다.
  3. 사용자가 다시 접속할 때, 브라우저는 저장된 토큰을 서버에 전달합니다.
  4. 서버는 전달받은 토큰을 검증하여 사용자를 식별합니다. 유효한 토큰인 경우, 사용자를 자동으로 로그인 처리합니다.

2. Spring Security를 활용한 Remember Me 기능 구현

Spring Security는 Remember Me 기능을 간편하게 구현할 수 있는 기능을 제공합니다. 아래는 Spring Security를 사용하여 Remember Me 기능을 구현하는 방법입니다.

  1. Spring Security 의존성 추가
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
  1. Security Config 설정 클래스 작성
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            // Remember Me 기능 활성화
            .rememberMe()
                .key("your-remember-me-key")
                .tokenValiditySeconds(60 * 60 * 24 * 7) // 7일 유효
                .userDetailsService(userDetailsService());

        // 기타 필요한 설정
        // ...
    }

    @Override
    protected UserDetailsService userDetailsService() {
        // 사용자 정보를 가져오는 UserDetailsService 를 구현하여 반환
        // ...
    }
}
  1. Remember Me 토큰을 저장할 데이터베이스 테이블 생성

Remember Me 기능은 토큰을 데이터베이스에 저장하여 관리합니다. 따라서 토큰을 저장할 테이블을 생성해야 합니다. 아래는 MySQL을 사용한 예시입니다.

CREATE TABLE persistent_logins (
    username VARCHAR(64) NOT NULL,
    series VARCHAR(64) PRIMARY KEY,
    token VARCHAR(64) NOT NULL,
    last_used TIMESTAMP NOT NULL
);
  1. 로그인 페이지에 Remember Me 체크박스 추가

로그인 페이지에 Remember Me 기능을 사용할지 여부를 선택할 수 있는 체크박스를 추가합니다.

<form action="/login" method="post">
    <input type="text" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <input type="checkbox" name="remember-me" value="true"> Remember Me
    <button type="submit">Log In</button>
</form>

위의 과정을 따라 Remember Me 기능을 구현하면 사용자가 로그인을 계속 유지할 수 있게 됩니다. 이를 통해 사용자는 매 번 로그인 정보를 입력하지 않고도 편리하게 서비스를 이용할 수 있습니다.

더 자세한 내용은 Spring Security 공식 문서를 참고하세요.


Photo by Austin Distel on Unsplash