Spring

SecurityConfig - SecurityFilterChain

한 면만 쓴 종이 2022. 11. 13. 00:50

SecurityFilterChain이란?

 

우선 FilterChainProxy를 알아야 함

이런 방식이기 때문

FilterChainProxy

  • Spring Security에서 사용하는 특수 필터
  • SecurityFilterChain을 통해 많은 Filter 인스턴스에 위임 가능
  • Bean임
  • 한 요청의 URL 패턴에 따라 SecurityFilterChain 하나를 선택 → 해당되는 Security Filter 들을 타도록 됨
  • 따라서 FilterChainProxy { 다수의 SecurityFilterChain { 다수의 SecurityFilter } } 이 가능

즉, Filter 인터페이스를 구현한 여러 종류의 필터들을 가지고 있는 인터페이스

 

 

HttpSecurity란?

세부적인 보안 기능을 설정할 수 있는 API를 제공하는 클래스

Spring Security의 설정들은 보통 HttpSecurity로 함

  • URL 접근 권한 설정
  • Login과 Logout 페이지 인증 완료 후, 페이지 인증 실패 시 이동페이지 등 설정
  • 인증 로직 커스텀을 위한 필터 설정
  • csrf, cors 등 설정

 

antMatchers

.antMatchers("/**").permitAll()

→ 특정 리소스에 대해 권한 설정

** antMatchers vs mvcMatchers

antMatchers는 ("/basic") 을 할 경우, /basic URL이랑만 매핑된다면, mvcMatchers는 /basic과 /basic.html 과 매핑됨

 

permitAll

antMatchers 설정한 리소스의 접근을 인증 절차 없이 허용

 

anyRequest

.anyRequest().authenticated()

 어떠한 요청에도 인증된 사용자여야 함

 

and

.and()

 한 configurer 기능이 끝날 때마다builder를 return 해줘서 다른 configurer와 chain 가능

 

 

formLogin().disable()

.formLogin().disable()

 security에서 제공해주는 로그인 페이지를 사용하지 않는다는 뜻

제공해주는 login 페이지

 

 

.oauth2Login()

oauth2Login에 대한 설정 시작

Oauth2LoginConfigurer 불러옴

 

.authorizationEndpoint()

인가에 대한 요청을 서비스할 때 사용

 

.baseUri("/api/oauth2")

 /api/oauth2로 접근하면 oauth2 로그인 요청 (소셜로그인)

 

.userInfoEndpoint()

oauth2Login 성공 이후의 설정을 시작

 

.userService(oAuthUserService)

→ oAuthUserService에서 설정 처리

 

.cors().configurationSource(corsConfig.corsConfigurationSource())

→ 인증 부분을 Security로 처리한 경우, CORS 정책을 Security에서 처리해주어야 함

CorsConfigurationSource를 cors 정책의 설정 파일로 등록

 

.csrf().disable()

non-browser clients 만을 위한 서비스는 csrf를 disable해도 괜찮음

 

 

 

[Spring Security] 스프링시큐리티 설정값들의 역할과 설정방법(2) (kimchanjung.github.io)