Spring Security 11

스프링 시큐리티(11) - 여러 필터 역할(2)

DefaultLoginPageGeneratingFilterGET : /login 리소스에 로그인 페이지를 응답하는 역할Form 로그인 이외에 Oauth2 로그인에 대하여도 활성화 할 수 있다.Config에서 자신이 커스텀한 경로에 로그인 페이지를 설정할 수 있다.기본으로 설정된 Form 로그인 화면  DefaultLogoutPageGeneratingFilterGET : /logout 경로에 로그아웃 페이지를 응답하는 역할  RequestCacheAwareFilterHTTP 요청에서 처리할 작업이 있지만 요청할 작업을 처리하지 못할 때, 이 필터에 등록되고 처리할 작업을 수행하기 위해 존재한다. SecurityFilterChain에 자동으로 등록된다.동작 예시로그인하지 않은 사용자가 권한이 필요한 “/my..

Spring Security 2024.07.27

스프링 시큐리티(10) - UsernamePasswordAuthenticationFilter

UsernamePasswordAuthenticationFilter 역할 :  “/login” 경로에서 Form 기반 인증을 진행할 수 있도록 multipart/form-data 형태의 username/password 데이터를 받아 인증 클래스에게 값을 넘겨주는 역할을 수행한다. SecurityFilterChain을 생성하면 자동 등록이 되지 않아 시큐리티 Config 클래스에서 필터 활성화 필요  과정 : 사용자에게 데이터를 받아 인증 → 인증 결과 → 성공/실패 핸들 AbstractAuthenticationProcessingFilter 추상 클래스의 모식도  Form 방식이외에 Json 로그인, OAuth2 로그인 구현은 attempAuthentication 추상클래스를 구현하여 직접 커스텀하거나 OA..

Spring Security 2024.07.27

스프링 시큐리티(9) - 여러 필터 역할(1)

SecurityContextHolderFilter : 인증한 사용자 정보를 현재 요청의 SecurityContextHolder의 SecurityContext에 할당하는 역할을 수행하고, 현재 요청이 끝나면 SecurityContext를 초기화 한다.HeaderWriterFilter : HTTP 응답 헤더에 User 보호를 위한 시큐리티 관련 헤더를 추가하는 필터X-Content-Type-Option : 컨텐츠 스니핑 보안X-XSS-protection : XSS 공격 감지시 로딩 금지 Options : Type과 다른 타입일 경우 예외 처리Cache-Control : 이전에 받았던 데이터와 현재 보낼 데이터가 같다면 로딩에 대한 결정 여부 판단Pragma : HTTP/1.0 방식에서 사용하던 Cache-C..

Spring Security 2024.07.20

스프링 시큐리티(8) - WebAsyncManagerIntegrationFilter

- 비동기 작업을 할때, WebAsyncManagerIntegerationFilter가 수행.- SecurityContextHolder의 ThreadLocal 전략의 따라 동일한 Thread에서만 SecurityContext가 접근 할 수 있는데, 비동기 방식의 경우 2개의 Thread로 수행되기 때문에 이 부분을 보완위해 Filter 수행.  * 컨트롤러에서 비동기처리하는데 어떻게 Filter에서 비동기 수행을 알고 작업할까?- WebAsyncManagerIntegrationFilter 작업을 수행하는 방법과 Callabe(비동기처리)의 동작 방식과 관련이 있음.- WebAsyncManagerIntegerationFilter에서 DispatcherServlet 에서 WebAsynManager에 Call..

Spring Security 2024.07.20

스프링 시큐리티(7) - DisableEncodeUrlFilter

- Url 파라미터에서 세션 ID가 인코딩되어 로그로 유출되는 것을 방지한다. - 세션값은 리턴하지 않고 Url만 응답한다.  * 기존 HttpServletResponse 인터페이스* 기존 메소드는 HttpServletResponse 인터페이스를 구현한 org.apache.catalina.connector.Response 클래스에 정의되어 있는 encodeRedirectURL(), encodeURL() 메소드는 request.getSessionInternal().getInternal()을 통해 session 값을 꺼내어 인코딩하는 로직을 확인할 수 있다.

Spring Security 2024.07.20

스프링 시큐리티(6) - 필터상속과 요청전파

스프링 시큐리티 Filter 하위 클래스GenericFilterBeanOncePerRequestFilter두 추상 클래스가 존재하며 두 클래스의 역 차이를 알아보자. OncePerRequestFilter  : 한번에 요청에 대해 동일한 서블릿필터를 여러번 거칠 경우 단 한 번만 반응한다. (forward 전)GenericFilterBean : 통과한 수 만큼 내부 로직 실행한다. Filter 인터페이스 클래스의 메소드init() doFilter()destory()init() : 서블릿 컨테이너 실행시 필터를 생성하고 초기화할 때 사용하는 메소드doFilter() : 요청에 대한 작업 수행 및 다음 필터를 호출하는 메소드destory() : 서블릿 컨테이너 종료시 초기화하는 메소드  * forward 와 ..

Spring Security 2024.07.20

스프링 시큐리티(5) - SecurityContextHolder

SecurityFilterChain 내부에 존재하는 각각의 필터가 시큐리티 관련 작업을 진행한다. 모든 작업은 기능 단위로 분업하여 진행함으로 앞에서 한 작업을 뒤 필터가 알기 위한 저장소 개념이 필요하다. SecurityContextHolder란, 앞 필터가 작업한 내용을 다른 필터에 공유하기 위해 저장하는 객체 해당하는 정보는 AUthentication 객체안에 담기며 Authentication 객체는 SecurityContext에 포함되어 관리되며 SecurityContext는 SecurityCOntextHolder에 의해 관리된다. Authentication 객체Principal : 유저에 대한 정보Credentials : 증명 (비밀번호, 토큰)Authorities : 유저의 권한(ROLE) 목..

Spring Security 2024.07.16

스프링 시큐리티(4) - SecurityFilterChain 구조

SecurityFilterChain의 각각의 Filter가 하나의 로직 (로그아웃, 로그인, 인가, 등등) 수행의 시작점이 된다. 스프링 시큐리티 제공 필터 간단 설명DisableEncodeUrlFilter : URL로 간주되지 않는 부분을 포함하지 않도록 설정WebAsyncManagerIntegrationFilter : 비동기로 처리되는 작업에 대해 알맞은 시큐리티 컨텍스트(세션)을 적용SecurityContextHolderFilter : 접근한 유저에 대해 시큐리티 컨텍스트 관리HeaderWriterFilter : 보안을 위한 응답 헤더 추가 (X-Frame-Options, X-XSS-Protection and X-Content-Type-Options)CorsFilter : CORS 설정 필터Csrf..

Spring Security 2024.07.16

스프링 시큐리티(3) - SecurityFilterChain 등록

Security Config에서 @Configuration 어노테이션과 @EnalbeWebSecurity 어노테이션을 설정하고 SecurityFilterChain을 한개 이상 설정할 수 있다. 멀티 시큐리티 필터체인(2개이상)일때, FilterChainProxy에서 등록된 필터체인을 선택하며 선택기준은 등록된 인덱스 순서(@Order로 인덱스 설정 가능)RequestMatcher값이 일치여부특정요청은 필터를 거치지 않게 설정할 수 있다.정적 자원은 필터를 통과하지 않도록 구문을 통해 설정할 수 있다.설정시 하나의 SecurityFilterChain이 0번으로 설정되며 해당 필터체인은 내부가 없는 상태로 생성된다.

Spring Security 2024.07.16

스프링 시큐리티(2) - DelegatingFilterProxy, FilterChainProxy

DelegatingFilterChain은 스프링 Bean찾아 요청을 넘기는 서블릿 필터이다.FilterChainProxy는 스프링 시큐리티 의존성을 추가하면 DelegatingFilterProxy에 의해 호출되는 SecurityFilterChain 들을 들고있는 BeanSecurityFilterChain 은 스프링 시큐리티 필터들의 묶음으로 실제 시큐리티로직이 처리되는 부분, FilterChainProxy가 SecurityFilterChain들을 들고있다.

Spring Security 2024.07.16
반응형