Spring/시큐리티 기본원리22 시큐리티 기본 원리( 22 ) - ExceptionTranslationFilter ExceptionTranslationFilter 목적해당 필터는 DefaultSecurityFilterChain에 기본적으로 등록되는 필터로 열다섯 번째에 위치한다. ExceptionTranslationFilter는 인증, 인가 과정에서 발생하는 예외를 핸들링하기 위한 동작을 수행한다. 이러한 동작 수행에 있어서는 아래와 같은 흐름을 따른다. 주요 로직ExceptionTranslationFilter 클래스public class ExceptionTranslationFilter extends GenericFilterBean implements MessageSourceAware {} doFilterprivate void doFilter(HttpServletRequest request, HttpServlet.. Spring/시큐리티 기본원리 2025. 1. 29. 시큐리티 기본 원리( 21 ) - AnonymousAuthenticationFilter AnonymousAuthenticationFilter 목적해당 필터는 DefaultSecurityFilterChain에 기본적으로 등록되는 필터로 열네 번째에 있다. AnonymousAuthenticationFilter 는 익명 사용자의 요청에 대해 처리해주는 필터이다. 즉 인증을 하지 않은 요청인 경우 인증 객체를 익명 권한이 들어가 있는 객체를 만들어 SecurityContextHolder에 넣어 주는 역할을 한다. 다르게 말하자면, SecurityContext값이 null 인 경우 Anonymous 값을 넣어주기 위해 사용한다고 볼 수 있겠다. 공식 문서를 살펴보면, public class AnonymousAuthenticationFilter extends GenericFilterBean impl.. Spring/시큐리티 기본원리 2025. 1. 29. 시큐리티 기본 원리( 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. 시큐리티 기본 원리( 18 ) - BasicAuthenticationFilter BasicAuthenticationFilter 목적 해당 필터는 DefaultSecurityFilterChain에 있는 열한 번째 위치의 필터이다. 필터가 수행하는 기능은 Basic 기반의 인증을 수행하기 위함이다.만약, 커스텀 SecurityFilterChain을 생성하면 자동 등록이 되지 않기에 아래와 같은 설정을 통해서 별도로 활성화 시켜주어야한다. http .httpBasic(Customizer.withDefaults()); Basic 인증 ?Basic 인증의 이해를 위해서 Form 인증 방식과 비교하며 파악해보자. Form 인증 방식은 Form 태그에 username / password 등을 입력한 후에 브라우저에서 서버로 전송하면,서버는 상태에 맞는 세션 or JWT를 생성하여.. Spring/시큐리티 기본원리 2025. 1. 28. 시큐리티 기본 원리( 17 ) - DefaultLogOutPageGeneratingFilter DefaultLogOutPageGeneratingFilter의 목적 이 필터는 DefaultSecurityFilterChain에서 열 번째에 위치한다. 등록되고 수행하는 기능은 Get 요청에 대해서 "/logout" 경로에 대해 기본 로그아웃 페이지를 반환한다.앞서 다룬 formLogin 설정과 밀접한 관계가 있다. formLogin을 사용하면, Spring Security는 로그인과 로그아웃을 위한 기본 페이지를 자동으로 제공한다.// 기본 사용http .formLogin(Customizer.withDefaults()); 커스텀 사용 예시그리고 만약 커스텀한 logout 페이지를 사용한다면, 다음과 같은 코드 로직을 볼 수 있다.http .logout(logout -> logout .. Spring/시큐리티 기본원리 2025. 1. 28. 시큐리티 기본 원리( 16 ) - DefaultLoginPageGeneratingFilter DefaultLoginPageGeneratingFilter의 목적 해당 필터는 DefaultSecurityFilterChain에 기본적으로 등록되는 필터로 아홉 번의 위치에 자리잡은 필터이다. DefaultLoginPageGeneratingFilter의 기능은 이름을 통해 파악할 수 있듯, 로그인 설정에 대해서 GET 요청에 대해 "/login" 경로에 기본 로그인 페이지를 제공한다. 해당 필터는 로그인 설정에 의존하여 대게 사용하는 formLogin에서 커스텀 SecurityFilterChain 등록시 아래와 같은 설정을 통해서 사용하면 기본 제공하는 기능을 사용할 수 있으며, 커스텀 로그인 페이지를 사용할 경우 제외하면 된다.// 기본 사용http .formLogin(Customizer.. Spring/시큐리티 기본원리 2025. 1. 28. 시큐리티 기본 원리( 15 ) - UsernamePasswordAuthenticationFilter / AbstractAuthenticationProcessingFilter / AuthenticationManager와 AuthenticationProvider UsernamePasswordAuthenticationFilter의 목적이 필터는 DefaultSecurityfilterChain에 포함되는 여덟 번째 위치의 필터이다. 이 필터가 등록되는 목적은 POST 요청에 근거하여 "/login" 경로에서 Form 기반 인증을 진행할 수 있도록 multipart/form-data 형태의 username/password 데이터를 받아 인증 클래스에 값을 넘겨주는 기능을 담당한다. 해당 필터는 Form 형태의 데이터만 받기에 다른 형식의 데이터를 처리하고 싶다면 수정이 필요하다. 해당 필터는 커스텀 SecurityFilterChain을 셍성하면 자동 등록이 안되기 때문에 개발자가 직접 등록이 필요하다.http .formLogin(Customizer.w.. Spring/시큐리티 기본원리 2025. 1. 27. 시큐리티 기본 원리( 14 ) - LogoutFilter LogoutFilter의 목적 LogoutFilter는 DefaultSecurityFilterChain에 기본적으로 등록되는 필터로 일곱 번째에 위치한다. 해당 필터가 등록되는 목적은 인증을 거쳐 생성된 사용자 정보가 SecurityContext나 Session 등에 남기에로그아웃 로직을 수행하고 싶을 경우, 해당 필터를 통해 사용자 정보를 지우는 기능을 담당한다. 기본적으로 로그아웃 처리에 대한 로직은 세션 방식에 대해 설정되었기에 JWT 방식이라면 별도로 추가하거나 커스텀해서 사용이 필요하다. LogoutFilter 비활성화 방법만약 커스텀 필터를 생성했어도, 아래의 코드를 통해서 비활성화가 가능하다.http .logout((logout) -> logout.disable()); Lo.. Spring/시큐리티 기본원리 2025. 1. 25. 시큐리티 기본 원리( 13 ) - CsrfFilter CSRF 공격Form 형식의 요청을 사용자의 의지와 무관하게 서버로 보내서 특정 로직을 수행하게 만드는 것이다. 예를 들어, 특정 메일을 클릭하면 현재 사용자의 비밀번호를 바꾸게 만든다거나커뮤니티에서 게시글을 조회함과 동시에 좋아요가 자동으로 눌리게 만드는 Form 형식의 javascript 요청을 심어두는 것이다.이처럼 Csrf는 인증된 사용자를 기반으로 사용자가 의도하지 않는 행위를 동작하게 만드는 것이다. https://nordvpn.com/ko/blog/csrf/ 크로스 사이트 요청 위조란?크로스 사이트 요청 위조란 무엇일까요? 이 글에서 크로스 사이트 요청 위조의 의미와 방지 방법을 확인해 보세요nordvpn.com 그리고 이러한 공격은 주로 세션 방식에서 자주 쓰인다. 세션 방식은 브라우저에.. Spring/시큐리티 기본원리 2025. 1. 24. 시큐리티 기본 원리( 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. 이전 1 2 다음