웹 사이트들을 보면 종종 로그인 정보 저장, 내 정보 저장 등 사용자의 정보를 기억하고 추후 웹 사이트 재방문 시 별도의 로그인 과정 없이 인증이 수행되도록 하는 기능이 존재한다.
문득 Spring의 인증/인가를 담당하는 Spring Security도 위의 기능을 제공하는지 궁금해졌고, 찾아본 결과 rememberMe라는 이름으로 해당 기능을 간편하게 구현할 수 있도록 제공한다는 것을 알아냈다.
그래서 해당 기능을 공부해보았고, 추후에 있을 프로젝트에서 언제든지 해당 기능을 쉽게 구현할 수 있도록 코드와 사용법을 정리해놓으려고 한다.
메인 주제가 Spring Security이기에 이전에 작성한 Spring Security 포스팅에서 이어서 작성한다.
가장 먼저 해야할 일은 HTML에 자동 로그인을 위한 체크박스를 생성하는 것이다.
위의 포스팅에서 작성했던 프로젝트를 불러와 login.html의 form 안에 다음 input 태그를 추가한다.
<label for="rememberMe">로그인 유지 여부</label>
<input type="checkbox" id="rememberMe" name="rememberMe"/> <br>
이렇게 하면 아래와 같이 로그인 화면에 로그인 유지 여부 라는 이름의 체크박스가 생성됨을 확인할 수 있다.
그 후 로그인 과정을 수행하는 ajax 코드를 수정한다.
위에서 rememberMe라는 이름의 체크박스 데이터를 마찬가지로 rememberMe라는 파라미터에 담아 로그인 과정에서 전송하도록 한다.
$.ajax({
type : "POST",
url : "/login",
data : {
[[${_csrf.parameterName}]] : [[${_csrf.token}]], //만약 넣어주지 않으면 에러가 발생한다. Logout도 마찬가지이다.
username : userName,
password : password,
//rememberMe
rememberMe : rememberMe
},
success : function(data, state, xhr) {
if(xhr.getResponseHeader("isSuccess") == "true") {
location.replace("/home");
}
else if(xhr.getResponseHeader("isSuccess") == "false") {
//HM 접근 권한이 없을 경우
alert('접근 권한이 없습니다.');
}
else {
alert('로그인에 실패했습니다. 아이디 혹은 비밀번호를 확인하세요.');
}
},
error : function() {
}
})
이렇게 구현하면 로그인 과정에서 rememberMe 라는 파라미터가 로그인 과정에서 함께 전송된다.
이제 해당 파라미터의 값에 따라 로그인을 유지할 수 있도록 코드를 작성한다.
Spring Security의 설정을 담아놓은 WebSecurityConfigurerAdapter를 상속받은 SecurityConfig 내 configure(HttpSecurity http) 메소드에 다음 코드를 추가한다.
http
.rememberMe()
.key("key") // token생성용 키값 (필수)
.rememberMeParameter("rememberMe") // rememberMe 파라미터
.tokenValiditySeconds(3600*24*365) // 토큰 유지 기간 (1년)
.userDetailsService(userService)
.authenticationSuccessHandler(loginSuccessHandler());
- key : 토큰 생성을 위한 키 값으로, 필수로 지정되어 있어야 한다.
- rememMeParameter : 로그인 시 파라미터로 들어오는 rememberMe의 파라미터 이름이다. ajax를 통해 rememberMe라는 파라미터에 담았으므로 같은 값을 설정한다.
- tokenValiditySeconds : 토큰 유지 기간(초 기준)으로, 위 코드에서는 1년으로 작성되었다.
추가로 UserController에 홈 페이지로 리다이렉트 하는 코드를 작성하자.
@GetMapping("/")
public String redirectMain() {
return "redirect:/home";
}
이렇게 작성한 후 로그인 유지 버튼을 체크한 후 로그인을 수행한다.
그 후 웹 사이트를 종료하고 재접속할 경우 인증과정 없이 곧바로 HOME 화면으로 넘어감을 확인할 수 있다.
'실습 > 리눅스 서버 + 스프링 부트' 카테고리의 다른 글
application.properties (yml) 암호화 (0) | 2022.07.25 |
---|---|
Spring WebFlux Filter (1) | 2022.07.25 |
Ehcache (0) | 2022.04.02 |
Redis In Java_메시지 큐 (0) | 2022.03.20 |
Redis In Java_자료구조 (0) | 2022.03.20 |