인프런 커뮤니티 질문&답변

정민교님의 프로필 이미지

작성한 질문수

스프링 시큐리티 완전 정복 [6.x 개정판]

WebSecurity / HttpSecurity

HttpSecurity bean을 생성하는 메소드

작성

·

175

·

수정됨

0

HttpSecurityConfiguration 클래스에 브레이크 포인트를 찍고, 디버그 모드로 실행했습니다.

HttpSecurityConfiguration 설정 클래스에 HttpSecurity bean을 생성하는 메소드가 여러 번 호출되는 것 같은데 맞나요?

여러 번 호출되는게 맞다면 그 이유가 뭔지 모르겠어서 답변해주시면 감사하겠습니다.

그 외에도 http.build()를 하는 부분에서 계속 this 참조가 가리키는 객체가 변경되면서 실행되던데 잘 이해가 안됩니다.

답변 2

0

정수원님의 프로필 이미지
정수원
지식공유자

초기화 시 여러번 호출되고 있습니다.

다만 맨 마지막에 호출되는 객체가 실행 시 사용되고 있습니다.

HttpSecurity 는 scope 가 prototype 이기 때문에 호출될 때마다 새로운 빈이 생성되어서 객체간 간섭이 있지는 않습니다.

여러번 호출되는 명확한 이유는 저도 잘 모르겠으나 버그 혹은 오류는 아닌 것 같습니다.

내부적으로 실행되어지는 흐름인 것 같습니다.

this 참조가 가리키는 객체가 변경되는 것도 여러개의 객체가 실행되고 있기 때문일 수 있습니다.

전반적으로 HttpSecurity 의 흐름을 이해하는 것에 의미를 두시면 될 것 같습니다.

0

안녕하세요, 인프런 AI 인턴입니다.

HttpSecurityConfiguration 설정 클래스에 HttpSecurity bean을 생성하는 메소드가 여러 번 호출되는 현상에 대한 질문에 답변드리겠습니다. 이러한 현상이 발생하는 주된 이유는 Spring Security의 설계 때문입니다. Spring Security에서는 보안 구성을 위해 HttpSecurity 객체를 제공하며, 이 객체를 통해 다양한 보안 설정을 구성합니다. 각각의 보안 구성 요소나 필터가 HttpSecurity 객체에 추가될 때마다, 내부적으로는 해당 구성의 build() 메소드가 호출됩니다. 이 과정에서 HttpSecurity 객체의 설정이 여러 번 호출되고, 각 호출마다 보안 구성이 추가되거나 변경될 수 있습니다.

또한, Spring Security의 컨텍스트에 따라 동일한 HttpSecurity 구성 메소드가 다른 설정을 위해 여러 번 호출될 수 있습니다. 이는 Spring Security가 어플리케이션의 다양한 보안 요구사항을 충족시키기 위해 유연하게 설계되었기 때문입니다. 예를 들어, 특정 엔드포인트에 대한 접근 제어, 다양한 인증 메커니즘의 구성, CSRF 보호 등 다양한 보안 관련 설정이 HttpSecurity 객체를 통해 조정되며, 이러한 설정은 어플리케이션의 구동 과정에서 여러 번 호출될 수 있습니다.

특히, http.build()를 호출하는 과정에 대한 구문을 보면, 이는 HttpSecurity 객체의 최종 구성을 완성하고, 스프링 시큐리티 필터 체인을 생성하는 부분입니다. 이 과정에서 this 참조가 가리키는 객체가 변경되는 것은, 내부적으로 HttpSecurity의 상태가 변화하는 것을 반영합니다. 즉, 보안 구성이 단계적으로 추가되거나 수정되면서 HttpSecurity 객체의 상태가 업데이트 되고, 이러한 상태 변화를 통해 최종 보안 구성이 완성되는 것입니다.

정리하자면, HttpSecurityConfiguration 클래스에 HttpSecurity bean을 생성하는 메소드가 여러 번 호출되는 것은 Spring Security의 유연한 설계와 다양한 보안 설정을 지원하기 위한 내부 구조 때문입니다. 이는 보안 설정이 단계적으로 구성되고 적용되는 과정을 반영한 것으로 이해할 수 있습니다.