Spring Security

Spring Security Configuration 실험

iksadnorth 2023. 9. 30. 10:09

실험 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 를 호출해도 모두 반영이 될 것이다.

 

그렇다면 실제로 코드가 위와 같이 진행될까?

확인을 위해 실험을 했다.

 

GitHub - iksadNorth/Security_Config_Lab

Contribute to iksadNorth/Security_Config_Lab development by creating an account on GitHub.

github.com

실험 결과

덮어씌우기가 아닌 모두 반영이 된다.

실제로 모든 설정이 씹히지 않고 그대로 반영됨을 알 수 있다.