시큐리티13 시큐리티 기본 원리( 20 ) - SecurityContextHolderAwareRequestFilter SecurityContextHolderAwareRequestFilter 목적과 사용이 필터는 DefaultSecurityFilterChain에 기본적으로 등록되는 필터로 열세 번째에 위치한다. 해당 필터가 제공해주는 기능은 Security Context와 HTTP 요청(HttpServletRequest)을 연결해주는 역할이다.더 쉽게 표현하자면, 보안 정보를 쉽게 사용할 수 있도록 도와주는 도우미라고 생각하면 편하다. 클라이언트의 로그인이 정상적으로 처리되면, Security에 클라이언트의 정보들을 SecurityContextHolder에 저장한다. 한편, Spring에서 HTTP 요청은 HttpServletRequest 객체에 담겨서 온다. 그리고 이 HttpServletRequest 에는 사용자에 대.. Spring/시큐리티 기본원리 2025. 1. 28. 시큐리티 기본 원리( 19 ) - RequestCacheAwareFilter RequestCacheAwareFilter 목적해당 필터는 DefaultSecurityFilterChain에 기본적으로 등록되는 열두 번째의 필터이다. RequestCacheAwareFilter는 이전 HTTP 요청에서 처리할 작업이 완료되지 못한 상태에서 현재 요청으로 함께 수행하기 위한 기능을 수행한다. 비활성화 방법커스텀 SecurityFilterChain에 기본적으로 등록되기에 아래와 같은 구문으로 비활성화 시킬 수 있다.http .requestCache((cache) -> cache.disable()); RequestCacheAwareFilter 의 동작 예시해당 필터의 목적을 봐선 왜 존재하는 지 와닿지 않을 수 있지만, 다음의 예시를 통해 수행하는 기능을 이해해보자. 1. 로그인.. Spring/시큐리티 기본원리 2025. 1. 28. 시큐리티 기본 원리( 12 ) - CorsFilter CorsFilter의 목적CorsFilter 필터는 DefaultSecurityFilterChain에 기본적으로 등록되는 필터 중 다섯 번째에 위치한다. Api 서버를 구축하면서 프론트와 백엔드의 오리진이 다르다면 발생하는 CORS문제 해결이 필요하다. 물론, CorsConfigurationSource 값을 설정하는 것이 해당 문제를 해결함에 더 중요하지만,CorsFilter에 대해서도 알아볼 필요가 있다. 이 필터가 등록되는 목적은 CorsConfigurationSource에 설정한 값에 따른 응답 헤더를 설정하는 것이다.❓ 그런데 왜 응답 헤더에 인증 설정값을 부여하는 것일까예를 들어, 브라우저가 요청을 보내고 서버는 설정한 경로의 허용 여부를 판단하여 응답 여부를 결정한다. 만약 허용된 경로라면 .. Spring/시큐리티 기본원리 2025. 1. 24. 시큐리티 기본 원리( 11 ) - HeaderWriterFilter HeaderWriterFilter는 DefaultSecurityFilterChain에 기본적으로 등록되는 필터로 네 번째에 위치하는 필터이다. HeaderWriterFilter의 목적 해당 필터의 기능은 Security관련 Header를 추가하는 것이며, Http 응답 헤더와 관련된 보안 기능을 추가한다. Header 목록필터 적용 전 응답 헤더 필터 적용 후 응답 헤더필터를 적용하고 난 뒤 Header 목록이 6개가 추가되었다. 그리고 해당 추가된 해당 필터 목록은 아래와 같다. key설명X-XSS-ProtectionXSS 공격 감지시 로딩 금지 (0은 비활성화)Cache-Control이전에 받았던 데이터와 현재 보낼 데이터가 같다면 로딩에 대한 결정 여부PragmaHTTP/1.0 방식에서 사용하.. Spring/시큐리티 기본원리 2025. 1. 23. 시큐리티 기본 원리( 10 ) - SecurityContextHolderFilter SecurityContextHolderFilter의 목적 이 필터는 DefaultSecurityFilterChain에 기본적으로 등록되는 필터 중 세 번째에 위치하는 필터이다. 해당 필터는 주로 세션 방식을 통한 인증 처리에 사용된다.수행하는 기능은 이전 요청을 통해서 이미 인증된 사용자 정보라면, SecurityContext에 할당하고 요청이 끝나면 SecurityContext를 초기화 한다. 만약 해당 필터의 비활성화를 원한다면, 아래와 같이 설정하면 된다. @Beanpublic SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http .securityContext((context) -> con.. Spring/시큐리티 기본원리 2025. 1. 23. 시큐리티 기본 원리( 9 ) - WebAsyncManagerIntegrationFilter 해당 필터는 DefaultSecurityFilterChain의 두 번째 위치에 존재한다. WebAsyncManagerIntegrationFilter의 목적 WebAsyncManagerIntegrationFilter가 하는 기능은 서블릿 단계에서의 비동기 작업 수행에 있어,서블릿 입출력 쓰레드와 작업 쓰레드가 동일한 SecurityContextHolder의 SecurityContext 영역을 참조할 수 있도록 도와주는 것이다. 이를 이해하기 위해서는 ThreaLocal에 대한 이해가 필요한데,ThreadLocal은 한 쓰레드에서 실행되는 코드가 동일한 객체를 사용할 수 있도록 도와준다. ( 이에 대한 자세한 내용은 후에 공부함이 필요하다. ) 만약 비동기 작업을 수행한다면 입출력 쓰레드와 작업 쓰레드를.. Spring/시큐리티 기본원리 2025. 1. 23. 시큐리티 기본 원리( 8 ) - DisableEncodeUrlFilter 앞서 시큐리티의 구성과 원리와 같이 청사진을 파악했다면, 앞으로 스프링 시큐리티를 구성하는 각 Filter에 대해서 다뤄보겠다. 그리고 이번 게시글에서 다룰 Filter는 DisableEncodeUrlFilter이다. DisableEncodeUrlFilter의 목적해당 필터는 DefaultSecurityFilterChain( 시큐리티 의존성을 추가하면 자동으로 등록 )에 기본적으로 등록되는 필터이며,시큐리티 필터의 가장 첫 번째에 위치한다. 해당 필터가 동작하는 기능은 URL 파라미터에서 세션ID가 인코딩되어서 로그로 유출되는 것을 방지한다. ( 세션 하이재킹과 같은.. ) https://stir.tistory.com/193 세션 탈취해서 로그인하기(세션 하이재킹) feat. 쿠키와 세션 실습HttpSe.. Spring/시큐리티 기본원리 2025. 1. 20. 시큐리티 기본 원리( 7 ) - GenericFilterBean과 OncePerRequestFilter 차이 SecurityFilterChain의 필터가 GenericFilterBean과 OncePerRequestFilter 기반으로 구현되었다는 점을 앞서 살펴보았다.따라서 두 Filter의 동작 원리에 대해서 이해하는 내용을 다뤄보려고 한다. 두 필터의 차이점 두 필터가 동작하는 차이의 기준은 한 번의 요청에 대한 처리 과정이다. 먼저, GenericFilterBean은 내부적으로 동일 필터를 여러 번 통과하여도 통과하는 순간마다 내부 로직이 매번 실행된다.반면, OncePerRequeestFilter는 내부적으로 동일 필터를 여러 번 통과하여도 처음 1번만 내부 로직이 실행된다.( 만약 요청이 2번 오면 OncePerRequestFilter도 두 번 실행된다. ) 따라서 GenericFilterBean를 .. Spring/시큐리티 기본원리 2025. 1. 20. 시큐리티 기본 원리( 6 ) - 필터 구조와 상속( GenericFilterBean과 OncePerRequestFilter ) SecurityFilterChain은 내부의 각 필터들을 통해서 인증/인가과 관련한 각각의 로직을 수행한다.전반적인 구조와 작동 방식에 대해 알아보겠다. Filter의 구조 각각의 필터가 하는 기능은 다르지만, 모두 같은 부모를 지니고 있는 데, 이는 서블릿 Filter 인터페이스를 상속하여 구현했다는 점에서 그렇다. 필터는 기본적으로 스프링 컨테이너의 DispatcherServlet에 도달하기 이전, 처리되는 톰캣과 같은 웹 컨테이너에 종속적인 기술이다. 그리고 이러한 Filter의 기능을 확장하여 Spring에서 제공하는 filter로 GenericFilterBean이 있다. 이에 SecurityFilterChain의 구조 역시도 서블릿의 Filter 인터페이스를 부모로 한 필터들의 집합으로 이루어.. Spring/시큐리티 기본원리 2025. 1. 19. 시큐리티 기본 원리( 5 ) - SecurityContextHolder( 인증 정보 공유 방식 ) SecurityFilterChain 내부에 존재하는 많은 필터로 시큐리티 관련 작업을 진행한다.모든 작업은 필터마다 기능 단위로 분업하여 진행하기에 앞에서의 작업이 이후 필터가 알기 위한 저장소 개념이 필요하다. 단편적인 예시로 인가 필터가 작업을 하려면 유저의 role 정보가 필요하게 되는데,앞단의 필터에서 유저에게 role값을 부여한 결과를 인가 필터에 도달하기 까지 공유해야 확인할 수 있다. 시큐리티의 정보 공유 방식 즉, 인가 필터 이전에 아이디, 로그인 여부, role 데이터 등의 정보를 저장하고 있을 곳이 필요한데,이러한 정보는 ‘Authentication 객체’가 저장한다 Authentication 객체가 담고 있는 정보는 크게 아래와 같다. Principal : 유저에 대한 정보Cred.. Spring/시큐리티 기본원리 2024. 6. 15. 시큐리티 기본 원리( 4 ) - SecurityFilterChain 구조 지난 포스팅에서 SecurityFilterChain을 등록하고 다중 필터에서 적절하게 맵핑하여 활성화하는 방법에 대해 알아보았다.이번에는 SecurityFilterChain의 구조에 대해서 다뤄보겠다. SecurityFilterChain의 내부 구조하나의 SecurityFilterChain 내부에는 N개의 필터가 있어 각각의 필터가 하나의 로직을 수행하는 시작점으로 작용한다.여기서 시작점으로 작용한다는 의미는 실제 필터는 특정 기능을 수행하도록 만드는 역할만 담당할 뿐,실제 기능의 구현은 스프링 컨테이너 내부에 담긴 Bean이 담당한다. 즉, 각 필터에 따라 스프링 컨테이너 내부의 구현체에 의하여 기능을 제공하는 것이다. SecurityFilterChain에 등록된 필터SecurityFilterCha.. Spring/시큐리티 기본원리 2024. 6. 15. 시큐리티 기본 원리( 2 ) - DelegatingFilterProxy / FilterChainProxy 시큐리티의 동작 원리에 큰 구성으로는 DelegatingFilterProxy / FilterChainProxy / SecurityFilterChain이 있다.그 중 DelegatingFilterProxy와 FilterChainProxy이 무엇인지 살펴보자. DelegatingFilterProxy / FilterChainProxy 이란?DelegatingFilterProxy 먼저 DelegatingFilterProxy는 스프링에 시큐리티 의존성이 활성화되어 있다면, 클라이언트의 요청을 가로채어서 등록된 FilterChainProxy로 요청을 보내는 역할을 수행하며, 특정한 시큐리티의 로직을 수행하지는 않는다. 그리고 DelegationgFilterProxy에 FilterChainProxy Bean으로 .. Spring/시큐리티 기본원리 2024. 6. 15. 이전 1 2 다음