[DEV] 기록

[SpringBoot] 세션이 만료될 때 세션 값 가져오는 방법

꾸준함. 2021. 4. 24. 22:39

개요

유저가 로그아웃할 때 시간을 DB에 저장하기 위해 세션이 만료되기 직전 세션 내 attribute를 가져와 어느 유저인지 확인하고 해당 유저의 로그아웃 시간을 업데이트해야 했습니다.

 

해결방법

처음에는 ApplicationListener<LogoutSuccessEvent>를 상속받은 후 LogoutSuccessEvent가 발생했을 때 유저 정보를 가져와 업데이트하는 방식으로 접근했는데, 해당 이벤트는 유저가 직접 로그아웃 버튼을 눌러야만 발생하는 문제점이 있었습니다.

저는 세션이 만료됨에 따라 로그아웃 되는 유저의 로그아웃 시간도 기록하고 싶었기 때문에 HttpSessionListener를 상속받은 뒤 sessionDestroyed 메서드를 오버라이드 하여 문제를 해결했습니다.

 

LogoutSuccessEvent가 발생했을 때 호출되는 코드

 

 

 

HttpSessionListener 코드

 

 

 

* 추가: HttpSessionListener 코드가 로컬에서는 잘 적용이 됐지만 상용 서버에서는 어떤 이유인지는 모르겠지만 잘 작동이 안되는 것을 확인했습니다. 따라서, 아래의 SessionDestroyedListener를 통해 해결했습니다. (2021-05-30)

 

SessionDestroyedListener


 

출처

stackoverflow.com/questions/33368963/how-to-get-all-session-values-and-names

 

How to get all Session values and names?

if i have values in a session and i need to get all the values in a session like String[] name = request.getParameterValues("values"); HttpSession session = request.getSession(); for(String temp:...

stackoverflow.com

stackoverflow.com/questions/6452757/httpsessionlistener-will-sessiondestroyed-method-be-called-on-session-timeout

 

HttpSessionListener - Will sessionDestroyed method be called on session timeout?

I have an implementation of HttpSessionListener where 'locked' resources in the application are released with sessionDestroyed method. The 'lock' information is maintained in database, and the rel...

stackoverflow.com

docs.spring.io/spring-security/site/docs/5.5.0-M1/api/org/springframework/security/authentication/event/LogoutSuccessEvent.html

 

LogoutSuccessEvent (spring-security-docs-manual 5.5.0-M1 API)

All Implemented Interfaces: java.io.Serializable public class LogoutSuccessEvent extends AbstractAuthenticationEvent Application event which indicates successful logout Since: 5.2.0 See Also: Serialized Form

docs.spring.io

 

반응형