분류 전체보기131 시큐리티 기본 원리( 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. 시큐리티 기본 원리( 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. 도커 입문 26 (최종) - 도커 compose (Nginx ,React, Spring, Mysql 연동) - Nginx를 활용한 리액트와 스프링 연동 😎다룰 내용도커를 사용해서 react, spring, DB를 nginx의 리버스 프록시로 연결하는 개념과 실습을 알아보자. 진행할 내용에 대한 개념docker를 통해서 프론트엔드와 백엔드 DB 그리고 Nginx 웹 서버를 구성하는 개념에 대해 알아보자.먼저, 앞서 진행한 구조는 아래와 같았다. 서버를 compose를 통해 구성하면서, 동일 네트워크에 구성하였다.그리고 각 서버의 주소는 생성에 따라 동적으로 할당되기에 compose에서 서비스 명칭을 참조하면 해당 ip값을 자동으로 참조하며, 백엔드에서 DB와 연동에 있어 환경변수 설정에 이것이 이용되도록 하였다. DB서버의 IP의 Port를 참조한다. = DNS 등록 이제 여기에 Nginx 웹서버를 통해서 프록시 서버를 구성하고 클라이언트의 요청에 따.. Docker/Docker 입문 2025. 1. 18. Optional 기초 사용법 Optional 이란?개발을 진행하다 보면, Primitive Type(원시 타입)과 더불어 Reference Type(참조 타입)을 사용한다. 원시 타입과 달리 참조 타입은 Null 값을 발생시키고 이로 가장 많이 발생하는 예외 중 하나인 바로 NPE(NullPointerException)을 유발한다. 이를 피하려면, null 여부를 검사하고 처리하는 로직이 필요한데 이를 모든 코드에서 사용하는 것을 상상해보면,꽤나 번거롭고 코드 가독성을 더럽힐 것이다. 따라서 Java는 8버전부터 Optional 클래스를 사용해서 NPE를 방지할 수 있도록 도와준다.이는 Null이 올 수 있는 값을 감쌀 수 있는 Wrapper 클래스이다. 이번 글에서는 Optional의 사용법에 대해 공부하고 정리해보겠다. .. Java/자바개념 2025. 1. 18. 이전 1 2 3 4 5 ··· 11 다음