순환 참조로 인해 아래와 같은 오류 발생
java.lang.StackOverflowError: null
CustomAuthenticationFailureHandler 클래스: 이 클래스는 CustomAuthenticationFailureHandler의 인스턴스를 WebSecurityConfig에 주입하려고 합니다.WebSecurityConfig 클래스: 이 클래스는 CustomAuthenticationFailureHandler를 주입받아, failureHandler 메소드로 사용하고 있습니다.WebSecurityConfig에서 로그인 폼의 action을 loginProcessingUrl("/security-check")로 설정하고 있습니다. 이는 Spring Security가 /security-check URL로 들어오는 POST 요청을 처리하도록 하는 설정입니다.WebSecurityConfig가 초기화되는 동안 CustomAuthenticationFailureHandler를 주입해야 하는데, CustomAuthenticationFailureHandler에서 오류 처리 시 다시 /login-form 페이지로 포워딩합니다.login-form 페이지의 폼에서 action이 제대로 설정되어 있지 않으면, 폼이 제출될 때 요청이 적절한 URL로 처리되지 않고, 계속해서 인증이 실패하여 같은 페이지로 돌아오게 됩니다.action이 제대로 설정되지 않았다면, /security-check로 요청을 보내지 않기 때문에, CustomAuthenticationFailureHandler가 제대로 동작하지 않습니다. 이로 인해 Spring은 오류 페이지로 다시 포워딩하고, 이 과정에서 같은 빈을 반복적으로 호출하게 됩니다. 이 과정에서 순환 참조가 발생할 수 있습니다.폼의 action 설정: 로그인 폼의 action 속성을 loginProcessingUrl에서 지정한 URL(/security-check)과 정확히 일치시켜야 합니다. 이 설정이 없으면, 로그인 폼이 잘못된 URL로 제출될 수 있고, 이로 인해 인증 실패가 반복적으로 발생하면서 순환 참조가 일어날 수 있습니다.
<form th:action="@{/security-check}" method="post">
<!-- 폼 필드들 -->
</form>
설정 확인: CustomAuthenticationFailureHandler에서 지정된 포워드 경로(/login-form)와 WebSecurityConfig에서 정의된 loginPage("/login-form")이 올바르게 설정되어 있는지 확인해야 합니다.
BCrypt는 비밀번호를 안전하게 저장하기 위해 설계된 해시 함수입니다. 이는 비밀번호를 저장하거나 확인하는 시스템에서 중요한 역할을 하며, 보안이 필요한 애플리케이션에서 널리 사용됩니다. BCrypt는 보안을 강화하기 위해 여러 가지 중요한 특성을 가지고 있습니다.