SpringBoot Session Timeout 설정을 해보겠습니다~
1. bean을 정의해둔 config 파일에 SessionListener 등록!
@Bean
public HttpSessionListener httpSessionListener(){
return new SessionListener();
}
2. SessionListener 파일 생성!
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionListener{
@Override
public void sessionCreated(HttpSessionEvent session) {
// 초단위로 설정된다. 테스트로 300(5분)으로 설정
session.getSession().setMaxInactiveInterval(60*5);
}
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
}
}
3. 시간이 잘 설정되었는지 확인하기! Controller에 세션을 확장할 메소드를 하나 생성한다.
@PostMapping("/extendSession")
ResponseBody
public boolean extendSession() {
logger.info("로그인 세션 연장");
logger.info(request.getSession().getMaxInactiveInterval());
logger.info("==============================");
// 리턴값으론 로그인 여부를 리턴해주고있다. 본인코드에 맞춰 수정하기
return 로그인여부(true or false) ;
}
이 메소드를 호출하면 아래 이미지처럼 설정된 시간이 초단위로 출력된다.
* 설정한 값으로 변경이 안된다면 브라우저 캐시 지우고 다시 실행하자!!
Session 만료를 사용자에게 알리기 위해 script 작업을 추가했다.
main_layout.html 에 스크립트 추가~ ( 전역에서 사용되는 공간에 추가하면 됩니다. )
//<![CDATA[
$(function () {
// 세션을 5분으로 설정해둬서 5로 설정함! 자기 시간에 맞춰 설정하기
// 숫자 5는 상수값으로 처리해서 사용하면 좋겠다!
var sessionTimeChecker = 5;
// 1분에 한번씩 인터발을 이용해 남은 시간을 계산한다.
var sessionInterval = setInterval(checkSession, 60000);
// 비동기 요청을 캐치해 시간을 리셋해준다.
$(document).ajaxStart(function () {
if(loginck) { // 로그인 여부 확인 후 세션 리셋
sessionTimeChecker = 5;
} else {
// 로그인이 안된 상태라면 인터발 종료
clearInterval(sessionInterval);
}
});
// 1분에 한번씩 호출되는 함수로 1분이 남았을때 alert를 출력해준다.
function checkSession() {
sessionTimeChecker -= 1; // 1분씩 마이너스해서 남은 시간을 계산한다.
console.log("인터발 동작 " + sessionTimeChecker +" " + new Date() );
// 1분이 남은 경우 알림창 띄운다.
// 확인버튼을 눌렀으나 이미 로그아웃된 경우는 만료알림 문구를 출력하고 페이지를 새로고침한다.
if(sessionTimeChecker == 1) {
if(confirm("장시간 사용되지 않아 1분뒤 자동으로 로그아웃됩니다. \n로그인 시간을 연장하시려면 확인 버튼을 클릭해주세요.")) {
$.post("/extendSession").done(function(data) {
if(!data) {
alert("유효시간 만료로 로그아웃 되었습니다.");
location.reload(); // 리로드되면 로그인화면으로 자동 변경됨
}
});
}
}
}
});
//]]>
* 여러번 반복되는 숫자들은 상수로 처리해서 하나만 수정하면 전부 수정되도록 코딩하는게 좋다.
아래 코드는 샘플로 값을 바로 확인하기 위해 그대로 입력해둠!
'Spring' 카테고리의 다른 글
Spring Security 수동 로그인! (0) | 2021.12.31 |
---|---|
[Spring] Sign in with Apple 기능 구현 완전체!! (0) | 2021.12.02 |
[SpringBoot] Session 으로 Login 처리! (0) | 2021.03.26 |
Spring 특정 URL만 encoding 다르게 처리하기 (0) | 2021.01.21 |
SpringBoot robots.txt 적용 (0) | 2020.12.14 |