[Spring Security] 웹 요청 처리 흐름

·2022년 11월 19일
1

SpringSecurity

목록 보기
2/13
post-thumbnail

Spring Security의 웹 요청 처리 흐름

내부적으로 Spring Security에서 제공하는 컴포넌트들이 애플리케이션 내부에서 User의 인증과 권한에 대한 처리를 알아서 진행해준다.

알아서 진행해준다?

정확하게 어떤식으로 진행되는지 흐름은 알아야 Spring Security의 적용 문제가 조금은 쉽게 다가온다.

흐름 뿌셔뿌셔👊

보안이 적용된 웹 요청의 일반적인 흐름

마이페이지를 접속하려고 할 때의 경우를 생각해보자!
내가 마이페이지라는 리소스를 요청하면 인증 관리자가 나에게 비밀번호를 요청할 것이다.

여기서 비밀번호크리덴셜(Credential)이라고 할 수 있다.

💡크리덴셜(Credential) 이란 해당 사용자를 증명하기 위한 구체적인 수단을 의미한다.

내가 크리덴셜(Credential)비밀번호를 제공하면 인증관리자크리덴셜 저장소에 저장된 사용자의 크리덴셜을 조회한 후, 내가 제공한 크리덴셜과 비교 검증을 수행한다.

만약, 비교 검증에 실패하면 Exception을 던진다.

유효한 크리덴션이라는 검증이 완료된 경우, 접근 결정 관리자 역할을 하는 컴포넌트가 내가 요청한 리소스가 해당 사용자의 권한으로 접근이 가능한 것인지 확인하기 위해 나의 권한을 검증한다.

적절한 권한을 부여 받지 못한 사용자라면 Exception을 던지고, 적절한 권한이 부여된 사용자라면 리소스 접근을 허용한다.

서블릿 필터와 필터 체인

위 내용에서 사용자의 요청을 통해 접근하려는 리소스에 도달하기 전에 인증 관리자접근 결정 관리자 같은 중간 컴포넌트가 요청을 가로채 사용자를 검증하는 것을 알 수 있다.

이처럼 중간에 요청을 가로챈 후 어떤 처리를 할 수 있는 적절한 포인트를 제공하는 것이 서블릿 필터(Servlet Filter)이다.

서블릿 필터

javax.servlet.Filter 인터페이스를 구현한 API로 자바에서 제공하고 있다. 웹 요청을 가로채어 어떤 처리(전처리)를 할 수 있으며, 엔드포인트(사용자의 요청 엔드포인트는 Controller)에서 요청 처리가 끝난 후 전달되는 응답을 클라이언트에게 전달하기 전에 어떤 후처리를 할 수 있다.

서블릿 필터는 하나 이상의 필터들을 연결해 필터 체인(Filter Chain) 을 구성한다.
각각의 필터들이 doFilter() 메서드를 구현하여, 해당 메서드 호출을 통해 필터 체인을 형성한다.
서블릿 필터에서 구현된 필터들의 작업들을 모두 수행한 후에야 HTTPServlet를 거쳐 DispatcherServlet에 요청이 전달된다.

반대의 경우, 후처리를 진행해야 하는 경우에는 DispatcherServlet에서 전달한 응답을 가로채 필터의 작업들을 진행한다.

Spring Security에서의 필터 역할

서블릿 필터 내에서 Spring Security도 클라이언트의 요청을 가로챈 뒤 추가적으로 작업을 진행한다.

그렇다면 Spring Security의 필터는 어떤 작업을 할까? 당연 보안 관련 작업을 진행한다.

위 그림에서 Spring Security Filter 영역에 DelegatingFilterProxyFilterChainProxy는 Filter 인터페이스를 구현한 클래스로서 서블릿 필터 내에서 Spring Security의 필터 역할을 담당한다.

DelegatingFilterProxy

서블릿 필터와 연결되는 Spring Security의 필터는 Application Context에 Bean으로 등록한 후 이 Bean들을 이용해 보안과 관련된 작업들을 처리한다.
이때, Bean으로 등록된 Spring Security의 필터를 사용하는 시작점DelegatingFilterProxy이다.

💡 서블릿 컨테이너 영역의 필터와 Application Context의 Bean으로 등록된 필터를 연결해주는 브릿지 역할!

FilterChainProxy

Spring Security Filter Chain 이란 Spring Security에서 보안을 위한 작업을 처리하는 필터들의 모음이다.

이런 필터들의 모음 중 시작점, 즉 사용하기 위한 진입점이 필요로 하는데 그 역할을 하는 것이 FilterChainProxy이다.

FilterChainProxy을 시작으로 Spring Security에서 제공하는 보안 필터들이 필요한 작업을 수행한다.

profile
🧑‍💻백엔드 개발자, 조금씩 꾸준하게

0개의 댓글