자동 로그인 설정 Remember Me
시큐리티를 사용하여 간단하게 구연할 수 있다.
실제 로그인 로직을 살펴보면 remember-me 체크를 하고 로그인시 해당 쿠키가 발급되어 생성되는 것을 볼 수 있다 .
사용자가 애플리케이션에서 로그아웃 시 JSESSIONID 뿐만 아니라 remember-me 쿠키도 삭제된다.
Remember Me
웹 인증 방식 중 쿠키를 사용하는 방식
로그인 된 사용자가 브라우를 닫고 재 접속 해도 로그인 절차 없이 로그인 처리가 진행되는 것이다.
Remember-me 토큰 쿠키를 사용한다.
- filterChain 에 http.rememberMe() 추가
- rememberMeParameter("checkbox name") : remember-me기능을 사용할 체크박스의 이름과 동일 값 (html)
- tokenValiditySeconds(60*60*24*7) : 쿠키를 얼마나 유지할 것인지 초단위로 설정 가능 하며 소셜로그인에서는 사용 불가능 하다. (ex 7일 유지)
- alwaysRemember(false) : 사용자가 체크박스를 활성화하지 않아도 항상 실행 ( default: false )
- userDetailsService(userDetailsService) : 로그인 기능 서비스 호출
📑SecurityConfig
package com.example.travel.config;
import com.example.travel.security.service.UserTravelDetailsService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;
@Log4j2
@Configuration
public class SecurityConfig {
@Autowired
private UserTravelDetailsService userDetailService; //로그인기능
@Bean
PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
...
// 자동 로그인
http.rememberMe()
.rememberMeParameter("remember")
.tokenValiditySeconds(60*60*24*7)
.alwaysRemember(false)
.userDetailsService(userDetailService);
...
return http.build();
}
}
📑 login.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
layout:decorate="~{layout/basic}">
<th:block layout:fragment="content">
<div class="container-fluid mt-5">
<div class="content_box">
<h2 class="tit text-center mb-4">로그인</h2>
<div class="loginForm">
<form th:action="@{/login_proc}" method="post">
<input name="${_csrf.parameterName}" type="hidden" value="${_csrf.token}"/>
<table>
<colgroup>
<col style="width:100px">
<col style="width:calc(100% - 100px)">
</colgroup>
<tbody>
<tr>
<th>
<label for="username">
아이디
</label>
</th>
<td>
<input th:name="username" name="username" id="username" class="form-control id" type="text" placeholder="아이디를 입력하세요.">
</td>
</tr>
<tr>
<th>
<label for="password">
비밀번호
</label>
</th>
<td>
<input th:name="password" name="password" id="password" class="form-control id"
type="password" placeholder="비밀번호를 입력하세요.">
</td>
</tr>
</tbody>
</table>
<div class="form-check form-switch pt-4 pb-4">
<label class="form-check-label" for="remember"> 로그인 상태 유지</label>
<input class="form-check-input" type="checkbox" role="switch" id="remember" name="remember">
</div>
<button class="btn btn-primary btn-lg w-100 " type="submit">로그인</button>
<div class=" pt-4 pb-4 mt-4 text-center border-top">
<a href="#">회원가입</a> |
<a href="#">아이디 찾기</a> |
<a href="#">비밀번호 찾기</a>
</div>
<div class="login_social pt-4 pb-4 text-center">
<h2 class="mb-4">간편 로그인</h2>
...
</div>
</form>
</div>
</div>
</div>
</th:block>
</html>
'BackEnd > Security · JPA' 카테고리의 다른 글
[ Security ] 05. 시큐리티 - 로그아웃 (0) | 2023.06.01 |
---|---|
[ Security ] 03. 시큐리티 소셜 로그인 처리 - Google oauth2 (0) | 2023.05.24 |
[ Security ] 02. 로그인 - 시큐리티 권한에 따른 페이지 접속 (0) | 2023.05.23 |
[ Security ] 01. 시큐리티 사용하기 - WebSecurityConfigurerAdapter 권한 설정 (스프링 부트 버전 2.7.0이전) (0) | 2023.05.23 |
[ Security ] 01. 시큐리티 사용하기 - 설정 파일 (0) | 2023.05.03 |