9C BLOG

session expired 처리 본문

STUDY/Spring

session expired 처리

티앤모이 2023. 4. 12. 13:29

session expired된 상황에서 클라이언트 요청이 오면 로그인 페이지로 리다이렉트 시켜주려고 한다.


* 회원 권한으로만 이동할 수 있는 URL일 경우 

* 비회원 권한으로도 이동할 수 있는 URL일 경우

* Ajax로 요청하는 경우


회원 권한으로만 이동할 수 있는 URL일 경우

 

1. session expired 된 상황에서 서버로 요청

 

2. 에러 발생하여 ExceptionTranslationFilter에서 가로채감

 

    * ExceptionTranslationFilter는 AuthenticationException과 AccessDeniedException 만을 처리함

 

3. AuthenticationException 에러이기 때문에 ExceptionTranslationFilter에서 처리함

 

4. LoginUrlAuthenticationEntryPoint에서 로그인 페이지로 리턴시켜줌.


비회원 권한으로도 이동할 수 있는 URL일 경우

 

 

1. AuthenticationException과 AccessDeniedException 모두 해당하지 않고 정상적으로 진행됨

 

2. Application 까지 들어와서 session에서 유저 정보를 가져와 사용하는 부분에서 에러남.

 

3. session에서 유저 정보를 가져오는 부분이 너무 많아서 일일이 null 처리를 할 수 없을 것 같음

 

4. 유저정보를 가져오는 부분에서 null을 리턴하는 대신 custom exception을 만들어서 throw 함

 

5. GlobalExceptionHandler에서 custom exception이 발생하면 로그인 페이지로 리다이렉트 시킴


Ajax로 요청하는 경우 - 회원 권한 허용일 경우

 

1. session expired 된 상황에서 ajax 요청

 

2. 에러 발생하여 ExceptionTranslationFilter에서 가로채감

 

* ExceptionTranslationFilter는 AuthenticationException과 AccessDeniedException 만을 처리함

 

3. 회원 권한 허용이지만 비회원 유저 권한도 있어서 Anonymous User 권한으로 체크되어 AuthenticationException이 발생하지 않고 AccessDeniedException 에러가 발생하였고, ExceptionTranslationFilter에서 처리함

 

4. LoginAuthenticationEntryPoint에서 commence 메소드를 통해 로그인 페이지로 리다이렉트 시킴

 

5. 위의 과정들은 모두 전자정부프레임워크에서 maven 라이브러리로 구현되어있음

 

6. LoginAuthenticationEntryPoint를 상속받아서 commence만 오버라이딩하려고 했는데 이미 빈으로 등록되어있는 부분을 변경할 수가 없음!!! ㅠ

 

7. 그래서 로그인 페이지로 리다이렉트 시킬 때 컨트롤러에서 ajax로 진입 시 custom exception을 발생시키고

GlobalExceptionHandler에서 custom exception에서 리다이렉트 시키는 부분을 변경시켜 401에러를 발생시키도록 하였다.

 

8. 기존의 Ajax 에러 처리를 하는 공통 JS 함수에서 401에러 발생 시 팝업 호출 후 다시 로그인 페이지로 리다이렉트 시켰더니 제대로 진행되었다!!!! 해결 완료!!!!!!!!!!!!!!!!!

 

 

 

https://velog.io/@dnrwhddk1/Spring-Security-%EA%B6%8C%ED%95%9C-%EC%B2%B4%ED%81%AC%EC%99%80-%EC%98%A4%EB%A5%98-%EC%B2%98%EB%A6%AC

'STUDY > Spring' 카테고리의 다른 글

인터페이스 크론 에러  (0) 2024.02.05
RestTemplate 한글 깨짐  (0) 2023.11.23
redirect 시 데이터 전달하기  (0) 2023.10.26
Spring Filter에서 호출 빈도 줄이기 작업  (0) 2023.10.05
MyBatis 제대로 맵핑되지 않을 때  (0) 2023.06.27
Comments