설정 코드
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception{
return http
.authorizeHttpRequests(
authorize -> authorize
.requestMatchers("/auth/login").permitAll()
.anyRequest().authenticated())
.csrf(AbstractHttpConfigurer::disable)
.formLogin(login -> login
.loginPage("/auth/login")
.loginProcessingUrl("/auth/login")
.usernameParameter("username")
.passwordParameter("password")
.defaultSuccessUrl("/")
)
.userDetailsService(userDetailService())
.rememberMe(rm -> rm
.rememberMeParameter("remember")
.alwaysRemember(false)
.tokenValiditySeconds(2592000)
)
.build();
}
.rememberMe(rm -> rm // remember me 기능 작동
.rememberMeParameter("remember") // default: remember-me, checkbox 이름과 동일 해야함
.alwaysRemember(false) // default: false 사용자가 체크박스를 활성화하지 않아도 항상 실행
.tokenValiditySeconds(2592000) // remember-me 쿠키 만료기간 default 14일
)
상세 설명
rememberMe()
Spring Security에서 Remember Me 기능을 활성화
사용자가 애플리케이션에 로그인할 때 선택적으로 자신의 인증 상태를 기억하도록 할 수 있다.
즉 세션 만료 기간이 지나도 Remember Me 쿠키가 존재하면 재로그인을 하지 않고 새로운 세션을 만들어준다.
자동 갱신 느낌
rememberMeParameter("remember")
Remember Me 기능을 활성화하는 파라미터의 이름을 설정
기본적으로 이 파라미터의 이름은 remember-me
check box 예시
<input type="checkbox" name="remember"> Remember Me
alwaysRemember(false)
Remember Me 기능이 항상 작동할지 여부를 결정
기본값은 false이며, 사용자가 로그인 폼에서 Remember Me 체크박스를 선택한 경우에만 작동
만약 true로 설정하면, 사용자가 체크박스를 선택하지 않더라도 Remember Me 기능이 항상 활성화
tokenValiditySeconds(2592000)
Remember Me 쿠키의 유효 기간을 초(second) 단위로 설정
기본 유효 기간은 14일이지만, 이 설정을 통해 30일 동안 로그인 상태를 유지하도록 변경
Remember Me 기능의 동작 방식
1. 로그인 이후 remember-me 쿠키 저장
사용자가 로그인 폼에서 Remember Me 체크박스를 선택하고 로그인할 때, 서버는 remember-me 쿠키를 클라이언트 브라우저에 저장
2. 다음 방문 시
쿠키가 여전히 유효하다면(설정된 만료 기간 내에 있다면), 사용자는 자동으로 로그인
3. 세션 만료와 독립적
Remember Me 기능은 브라우저가 닫히거나 서버의 세션이 만료되더라도, 쿠키가 만료되지 않았다면 사용자를 인증할 수 있다. 이는 사용자 경험(UX)을 향상시켜준다.
Remember Me 테스트
로그인 + Remember me 체크
### 로그인
POST http://localhost:8080/auth/login
Content-Type: application/x-www-form-urlencoded
username=baejeu&password=1234&remember=1
로그인 결과 + 쿠키 확인
메인 페이지
# domain path name value date
localhost / SESSION ZGUyMGQyM2MtMDMxZi00Yjk4LWFlYzUtODVkOTg2NWFhNDU4 Mon, 02-Sep-2024 12:12:16
localhost / remember-me YmFlamV1OjE3Mjc4Njc1MzYxNTA6U0hBMjU2OmY5NmI2NDI1ZDVlYTFjNGMyNDgxNGZhZDE0ODQ0YTQzZGFmNDA4NzQyYjJiNDc0MGYyMjY1NmRlYmQ4NDlmNjM Wed, 02-Oct-2024 11:12:16
세션 쿠키뿐만 아니라 remember-me 쿠키가 추가로 생성되어 있다.
세션 쿠키를 삭제하고 인가가 필요한 페이지에 요청해도 remember-me 쿠키 덕분에 정상적으로 요청이 되고 세션 쿠키 또한 새롭게 갱신된다.
'Spring > Spring Security' 카테고리의 다른 글
[Spring Security] ROLE VS AUTHORITY (0) | 2024.09.02 |
---|---|
[Spring Security] UserDetailsService (0) | 2024.09.02 |
[Spring Security] Spring Session JDBC (2) | 2024.09.02 |
[Spring Security] 시큐리티 폼 로그인 커스텀 설정 (0) | 2024.09.02 |
CSRF? + Spring Security 기본 설정 (4) | 2024.08.29 |