정수원님의 강의 스프링 시큐리티 완전 정복 [6.x 개정판] 보면서 공부한 내용입니다.

다중 보안 설정

  • 단일 보안 기능을 구성하면 클라이언트가 보내는 모든 요청에 대해 하나의 보안 필터가 작동하도록 구성된다
  • 하지만, 다중 보안 설정을 하면 클라이언트가 보내는 요청에 따라 다르게 보안 정책을 두어 실행할 수 있다
// /api/로 시작하는 URL에만 보안 필터 적용
http.securityMatcher("/api/**") 

// /api/를 제외한 모든 URL에 보안 필터 적용
http .authorizeHttpRequests(authorize 
		-> authorize.anyRequest().authenticated())

다중 보안 설정 방법

  • 클라이언트에게 api/user/에 httpSecurity 요청이 오는 경우
  1. SecurityFilterChain에는 http.securityMatcher("/api/**")http .authorizeHttpRequests(authorize -> authorize.anyRequest().authenticated()) 요청을 처리하는 필터가 있다
  2. api/user/ 의 경우 두 필터 모두 요청에 부합하므로 모두 작동이 가능하다
  3. 하지만 @Order 어노테이션을 사용하여 http.securityMatcher("/api/**") 필터가 먼저 작동하도록 설정한다
@Order(1) 
// @Order 를 사용하여 어떤 SecurityFilterChain을 먼저 수행 할지 지정한다
// 아래 설정보다 우선적으로 보안 기능을 수행한다
public SecurityFilterChain apiFilterChain(HttpSecurity http) throws Exception {
http.securityMatcher("/api/**") 
	...
}


@Bean // @Order 가 지정되지 않으면 마지막으로 간주 된다
public SecurityFilterChain formLoginFilterChain(HttpSecurity http) throws Exception {
http .authorizeHttpRequests(authorize 
	-> authorize.anyRequest().authenticated())
	...
}

Custom DSLs

  • 사용자 정의 DSL을 구성하면 필터, 핸들러, 메서드, 속성 등을 한 곳에 정의하여 처리할 수 있다
  • DSL을 적용하기 위해서는 HttpSecurity.with(C configurer, Customizer<C> customizer) API가 필요하다
    • configurer : AbstractHttpConfigurer을 상속받고 DSL을 구현한 클래스가 들어간다
      ex) public class MyCustomDsl extends AbstractHttpConfigurer<MyCustomDsl, HttpSecurity>
    • Customizer : DSL 구현 클래스에서 정의한 여러 API 를 커스트 마이징한다
    • with를 여러 번 설정하더라도 한번 만 적용된다

AbstractHttpConfigurer<AbstractHttpConfigurer, HttpSecurityBuilder>

  • 사용자 DSL 을 구현하기 위해서 상속받는 추상 클래스로서 구현 클래스는 두 개의 메서드를 오버라이딩 한다
    • init(B builder) : HttpSecurity 의 구성요소를 설정 및 공유하는 작업 등 기술
    • configure(B builder) : 공통클래스를 구성 하거나 사용자 정의 필터를 생성하는 작업 등 생성하는 작업

builder에는 HttpSecurity가 들어간다

Redis를 활용한 이중화 설정

  • 이중화는 시스템의 부하를 분산하고, 단일 실패 지점없이 서비스를 지속적으로 제공하는 아키텍처를 구현할 수 있도록 한다
  • 이중화된 환경에서 인증, 권한 부여, 세션 관리 등의 보안 기능을 제공하며 세션 정보를 공유할 수 있는 Redis 같은 분산 캐시를 사용하여 여러 서버 간에 세션 정보를 공유할 수 있다
profile
높은 곳을 향해서

0개의 댓글

Powered by GraphCDN, the GraphQL CDN