세션 관리를 위한 필터로 스프링 시큐리티의 네 가지 기능을 지원한다.
ConcurrentSessionFilter의 주 역할은 동시 접속에 대한 제어이다.
사용자의 요청이 들어올 때마다 매번 세션이 만료되었는지 체크하고 만료된 세션의 경우 해당 요청자를 로그아웃 시킨다. 실질적인(물리적인) 세션의 만료가 이뤄지는 필터이다.
자세한 동작 방식은 코드를 통해 알 수 있다.
private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpSession session = request.getSession(false);
if (session != null) {
SessionInformation info = this.sessionRegistry.getSessionInformation(session.getId());
if (info != null) {
if (info.isExpired()) {
// Expired - abort processing
this.logger.debug(LogMessage
.of(() -> "Requested session ID " + request.getRequestedSessionId() + " has expired."));
doLogout(request, response);
this.sessionInformationExpiredStrategy
.onExpiredSessionDetected(new SessionInformationExpiredEvent(info, request, response));
return;
}
// Non-expired - update last request date/time
this.sessionRegistry.refreshLastRequest(info.getSessionId());
}
}
chain.doFilter(request, response);
}
SessionRegistry에서 요청의 아이디로 세션 정보(SessionInformaion)를 읽어온 후 세션이 만료되었는지 확인한다.
만료된 경우 로그아웃(doLogout) 시키고 지정된 만료된 세션 정책(SessionInformatioinExpriedStrategy)에 따라 동작한다.
전체적인 흐름은 아래와 같다.
[세션관리 ( 동시접속 )] https://escapefromcoding.tistory.com/487
[Spring Security : SessionManagementFilter / ConcurrentSessionFilter] https://ojt90902.tistory.com/828
[SPRING SECURITY] SessionRegistry 이용하기 (1) | 2022.11.20 |
---|---|
[SPRING SECURITY] ConcurrentSessionFilter 이용하여 동시접속 제어하기 (0) | 2022.11.20 |
[SPRING BOOT] 2521 과몰입러의 스프링부트 웹소켓 채팅 서비스 만들기(2) 화면구성과 JS (0) | 2022.03.15 |
[SPRING BOOT] 2521 과몰입러의 스프링부트 웹소켓 채팅 서비스 만들기(1) 자바소스 (0) | 2022.03.14 |
[SPRING] MultipartFile 게시판 이미지 업로드(2)ajax 이용과 게시판에 적용 (0) | 2022.01.10 |
댓글 영역