배경
팀원이 작성한 프로젝트 코드 중 일부에서 세션 존재 여부를 검증하기 위해 조건문으로 getSession()을 사용하는 경우가 있었다. 처음에는 대수롭지 않게 넘어갔지만, 해당 로직이 로그인하지 않은 상태인데 접근할 수 있는 영역에 존재해서 로그인을 하지 않았음에도 불구하고 세션을 발급하는 문제가 생겼다.
getSession()
세션 기반 인증 방식을 가진 애플리케이션에서 HttpServletRequest.getSession()을 통해 우리는 간단하게 session 정보에 접근할 수 있다. session에 접근해서 세션 정보를 확인 할 수도 있고, 세션을 무효화(invalid) 시킬수도 있다.
하지만 파라미터가 없는 getSession()은 숨겨진 기능이 존재한다. 바로 세션을 생성하는 것이다.
HttpServeltRequest 인터페이스의 구현체인 ApplicationHttpRequest에서 getSession 정보를 찾아 볼 수 있다.
getSession()은 동일한 getSession(boolean create) 메서드를 오버로딩 하는 것을 확인 할 수 있다.
위 코드는 getSession(boolean create) 코드 중 일부이다.
해당 코드에서는 create 파라미터가 true 값이고 session/localSession 값이 null인 경우 신규 세션을 생성한다는 내용을 포함하고 있다. (문제가 되었던 부분)
즉, 인증 이전 영역에서 getSession() 호출한다면 세션이 그냥 생성되는 것이다. [ getSession(true) 포함 ]
결론
조건 문에 getSession()이 아닌 getSession(false)로 수정해서 더 이상 세션이 생성되지 않게 하여 문제를 해결했다.
해당 문제 해결을 통해 라이브러리에 있는 메서드의 기능을 단순하게 추측해서 호출하는 것에 대해 다시 한 번 생각하게 되었다.
'Spring' 카테고리의 다른 글
Controller에서 의존성 주입 대상 필드 값이 NULL이 되는 문제와 해결방안, 이유 (0) | 2024.02.17 |
---|---|
Spring Data Redis를 활용해서 레디스 기본 명령어 사용하는 방법 (0) | 2024.02.12 |
[Spring] 동일한 패키지 클래스 생성으로 라이브러리 직접 수정하기 (0) | 2023.10.07 |
Spring 인텔리제이 Service, Common, Batch 모듈 분리하기 (Maven) (0) | 2023.09.17 |
외부 라이브러리 내부 sendRedirect() 사용 우회 방법 (0) | 2023.08.26 |
댓글