실험 1
만약 authorizeHttpRequests 를 연거푸 호출하면 모든 설정이 제대로 반영될까?
정확한 실험 이유는 다음과 같다.
💡 만약 authorizeHttpRequests 를 연거푸 호출하면 모든 설정이 제대로 반영될까? 혹시 마지막에 사용된 authorizeHttpRequests 만 반영되는 구조인 것인가?
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
// 만약 덮어씌우기라면 사라져야 할 설정 1.
http.authorizeHttpRequests(b ->
b.requestMatchers(AntPathRequestMatcher.antMatcher(HttpMethod.GET, "/api/case1")).permitAll()
);
// 만약 덮어씌우기라면 사라져야 할 설정 2.
http.authorizeHttpRequests(b ->
b.requestMatchers(AntPathRequestMatcher.antMatcher(HttpMethod.GET, "/api/case2")).permitAll()
);
// 어쨋든 살아남게 될 설정 3.
http.authorizeHttpRequests(b ->
b.anyRequest().authenticated()
);
return http.build();
}
우선 이론적으로는 덮어씌우기가 아닌 모두 반영이 맞다는 결론에 이르렀다.
이유는 다음과 같은 코드 때문이다.
getOrDefault라는 메서드를 살펴보면 만약 기존에 정의된 설정이 존재한다면 존재하는 Configurer를 출력하고 아니라면 새로운 Configurer를 생성하는 코드이다.
이 코드에 의하면 연거푸 authorizeHttpRequests 를 호출해도 모두 반영이 될 것이다.
그렇다면 실제로 코드가 위와 같이 진행될까?
확인을 위해 실험을 했다.
실험 결과
덮어씌우기가 아닌 모두 반영이 된다.
실제로 모든 설정이 씹히지 않고 그대로 반영됨을 알 수 있다.
'Spring Security' 카테고리의 다른 글
인증 필터는 어떻게 재정의할 수 있을까? (0) | 2023.09.01 |
---|---|
AuthenticationProvider를 내 맘대로 커스터마이징할 수 있을까? (0) | 2023.09.01 |
UserDetailsService 구현은 항상 요구되는 것인가? (0) | 2023.09.01 |
인증 관련 Architecture 분석 (0) | 2023.09.01 |