[BE-10] SecurityConfig 와이어업 (Partner 필터 등록 + admin matcher)

작업 내용 (설계 의도)

변경 사항

근거 TDD: ../TDD.md “Release Scenario”. 공통 파일 SecurityConfig.kt 단독 수정 통합 티켓 — Single Writer 보호를 위해 마지막 wave 단독 배치.

  • infrastructure/security/SecurityConfig.kt:
    • PartnerApiKeyAuthenticationFilter(BE-08)를 addFilterBefore(..., UsernamePasswordAuthenticationFilter) — JWT/mcp 필터와 동일 지점. partner.auth.enabled=true일 때만 등록(플래그 게이트, mcp의 @Autowired(required=false) 방식 참조 가능).
    • auth.requestMatchers("/api/admin/partners/**").hasRole("ADMIN") 추가.
    • 재사용 엔드포인트(/api/goods-seller/**·/api/event-host/**)는 이미 authenticated() → 변경 없음.
  • application.ymlpartner.auth.enabled 기본값(배포 시 OFF → ON 전환).

롤백: partner.auth.enabled=false → 필터 미등록, 파트너 인증 휴면. B2C/JWT/mcp 무영향.

의존

  • BE-08

다이어그램

처리 흐름 (필터 체인)

flowchart LR
    Req["Request"]
    PF["PartnerApiKeyFilter (flag ON)"]
    MF["McpTokenFilter"]
    JF["JwtAuthenticationFilter"]
    Chain["FilterSecurityInterceptor"]
    Req --> PF
    PF --> MF
    MF --> JF
    JF --> Chain

테스트 케이스

  • partner.auth.enabled=true일 때 파트너 API Key 요청이 인증되어 등록 엔드포인트에 도달한다.
  • partner.auth.enabled=false일 때 필터가 미등록되고 파트너 키 요청은 401을 받는다(휴면).
  • /api/admin/partners/** 요청은 비ADMIN 시 403을 받는다.
  • 기존 JWT 기반 B2C 요청은 파트너 필터 등록 후에도 정상 동작한다(회귀 없음).