[java] Remember Me 인증 기능
웹 애플리케이션에서 사용자의 인증을 지속적으로 유지하기 위해 “Remember Me” 기능을 구현하는 방법에 대해 알아보겠습니다.
1. Remember Me 기능의 동작 방식
Remember Me 기능은 사용자가 로그인한 후, 웹 브라우저를 종료하고 다시 접속했을 때 자동으로 로그인 상태를 유지해 줍니다. 이를 위해 아래와 같은 동작 방식을 사용합니다.
- 사용자가 로그인을 성공적으로 완료하면, 서버는 사용자를 식별할 수 있는 토큰을 생성합니다.
- 생성된 토큰은 사용자의 웹 브라우저에 저장됩니다.
- 사용자가 다시 접속할 때, 브라우저는 저장된 토큰을 서버에 전달합니다.
- 서버는 전달받은 토큰을 검증하여 사용자를 식별합니다. 유효한 토큰인 경우, 사용자를 자동으로 로그인 처리합니다.
2. Spring Security를 활용한 Remember Me 기능 구현
Spring Security는 Remember Me 기능을 간편하게 구현할 수 있는 기능을 제공합니다. 아래는 Spring Security를 사용하여 Remember Me 기능을 구현하는 방법입니다.
- Spring Security 의존성 추가
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
- 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 를 구현하여 반환
// ...
}
}
- 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
);
- 로그인 페이지에 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