시큐리티 부분을 따로 팀으로 나눠 맡아서 작업하다보니
다른 팀들은 관련 내용을 알고 학습해야 함에도 불구하고
시간과 기회가 없을 것 같아서
스프링 시큐리티에 대해, 그리고 우리 프로젝트 내에서의 적용에 대해
팀모임 시간에 학습한 내용을 정리해서 나누었다.
(1)

(2)

스프링 시큐리티는 양파와도 같다.
여려개의 필터라는 겹으로 이루어져 있기 때문이다.
(3)

스프링 시큐리티에 대해 본격적으로 들어가기 전에
서블릿 필터라는 개념을 알아야 한다.
사용자가 서버로 요청을 보낼 때,
컨트롤러 등의 서블릿 단으로 전달되기 전에
요청은 여러개의 필터를 거치게 된다.
(4)

스프링 시큐리티는 이런 서블릿 필터의 개념을 확장하는데,
시큐리티 의존성을 설치하게 되면
이 필터들 사이에 DelegatingFilterProxy가 생성이 된다.
이 필터 프록시는 요청을 가로채서 시큐리티 필터 체인으로 전달하는 역할을 한다.
(5)

그래서 넘어온 요청은 이런 기본 필터들을 거치게 되는 것이다.
(6)

그래서 이런 익숙한 화면까지 나오게 되는 것이다.
(7)

이 필터 체인들을 설정하는 것이 SecurityConfig 클래스이다.
어떤 필터가 어떤 순서로 적용될 것인지 설정하게 된다.
(8)

우리 프로젝트에도 SecurityConfig 가 설정이 되어 있고
(9, 10)


이런 필터들을 거치게 된다.
각 필터마다 사용자를 인증하고 예외들을 처리하며
인가인증 작업을 수행하게 되는 것이다.
(11)

그 중에 중요한 역할을 수행하는 필터가
CustomAuthenticationFilter 인데
요청의 URL 을 확인해 api 요청인데
로그인 로그아웃이 아닌 경우 이후의 인증 작업을 수행한다.
(12)

인증 작업은
헤더와 쿠키를 확인해 토큰을 얻고
토큰이 만료되었을시 갱신도 진행하며
얻은 토큰으로 사용자를 생성해
인증을 진행하게 된다.
이상 현재 프로젝트에서 사용하는 인증 방법과
스프링 시큐리티에 대한 간단한 설명이었습니다.