SessionManagementFilter (Spring Security 4.0.4.RELEASE API)
setInvalidSessionStrategy public void setInvalidSessionStrategy(InvalidSessionStrategy invalidSessionStrategy) Sets the strategy which will be invoked instead of allowing the filter chain to prceed, if the user agent requests an invalid session Id. If t
docs.spring.io
세션 관리를 위한 필터로 스프링 시큐리티의 네 가지 기능을 지원한다.
ConcurrentSessionFilter (Spring Security 4.0.4.RELEASE API)
Filter required by concurrent session handling package. This filter performs two functions. First, it calls SessionRegistry.refreshLastRequest(String) for each request so that registered sessions always have a correct "last update" date/time. Second, it re
docs.spring.io
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 |
댓글 영역