좋아, 쉽게 설명할게.
HTTP 요청이 들어오면 체인 형태로 필터들을 순서대로 통과하는 구조야.
요청 → [Filter1] → [Filter2] → [Filter3] → Controller
SecurityFilterChain은 이 필터 묶음을 하나의 체인으로 정의하는 거야.
예를 들어
/api/** → JWT 인증 필요한 일반 체인
/admin/** → JWT + 관리자 권한 체인
/public/** → 인증 없는 퍼블릭 체인
요청 경로마다 다른 보안 규칙을 적용할 수 있어.
configureCommonSecurity에 oauth2, jwt필터까지 넣으면
// 어드민 체인 만들 때
public SecurityFilterChain adminFilterChain(HttpSecurity http) {
configureCommonSecurity(http); // oauth2, jwt필터가 여기 들어있으면
// 원하든 원하든 어드민에도 적용됨 ❌
}
공통 설정 = 어떤 체인이든 항상 똑같이 적용되는 것
csrf disable
session stateless
formLogin disable
체인별 설정 = 체인마다 다를 수 있는 것
oauth2 설정
jwt 필터
permitAll 경로
exceptionHandling
이걸 섞어놓으면 나중에 체인 추가할 때 의도치 않은 설정이 같이 딸려와서 버그가 생길 수 있어.