스프링 시큐리티는 기본적으로 POST 방식의 로그아웃을 진행한다
스프링 시큐리티가 제공해주는
기본 화면은 다음과 같다
개발자 모드에서 확인 하면 POST 인걸 확인 할 수 있다
참고로, 로그아웃과 관련된 필터는 LogoutFilter 이다
대략 흐름은
1. 시큐리티 컨텍스트에서 인증객체를 가져온다
2. 로그아웃을 진행 (request와 response와 인증객체)
3. 로그아웃 성공 핸들러 동작
이런 메커니즘을 가지고있다, 또 로그아웃 페이지도 생성된다
두가지 방법으로 GET 방식을 사용해보자
v1. LogoutFilter 는 사용하되 , GET으로만 변경하기
설명할것도 없이 간단하다 :)
v2. LogoutFilter 를 사용하지 않고, 직접 로그아웃 프로세스 구현하기
구현하기 전에 로그아웃에 대하여 생각해보자
1. 시큐리티 컨텍스트 초기화
2. 세션 초기화
3. 쿠키 삭제
이정도 처리를 해줘야할 것 같다
로그아웃은 로그인을 해야 할 수 있는 기능이다 따라서 ROLE_USER 권한을 주었다
requestCache 설정을 비활성화 했다,
따라서 RequestCacheAwareFilter 필터를 생성하지 않는다
logout 설정을 비활성화 했다,
따라서 RequestCacheAwareFilter 필터를 생성하지 않는다
두 설정은 최초에 /mylogout -> login 화면 -> 로그인 진행 -> 캐쉬로 인해 /mylogout 재호출
이를 방지하려고 그냥 껏다
이제 /mylogout 컨트롤러를 보자
그렇게 깨긋한 코드는 아니지만 의미는 전달될거라 생각한다
로그아웃 컨트롤러에서
컨텍스트를 초기화하고, 세션을 지우고, 쿼리스트링을 추가하여 메인화면으로 리다이렉트했다
그리고 메인화면에서 쿼리스트링이 있다면 추가로 사용자의 쿠키까지 삭제했다
일단 여기까지 끝.
'개발 > spring-security' 카테고리의 다른 글
SpringSecurity - CORS 허용 (0) | 2024.05.12 |
---|---|
AuthenticationManager 를 Bean 등록해보자 (0) | 2024.05.11 |
UserDetailsService, PasswordEncoder 에 대하여 이야기 해보자 (0) | 2024.05.06 |
UsernamePasswordAuthenticationFilter 에 대한 간단한 관찰 (0) | 2024.05.03 |
자동 생성 SecurityFilterChain (0) | 2024.05.03 |