Spring Security 로그인 실패 핸들링

알파로그·2023년 4월 24일
0

Spring Boot

목록 보기
39/57

✏️ 로그인 실패시 원하는 로직 작동시키기

  • 로그인과 관련된 로직은 Srping Security 가 전담하기 때문에 Controller 에서 직접 설정을 해줄 수 없다.
    • 즉 Security 계층에서 설정해주어야 하는데 Conroller 에서 다루는 방법과 다르기 때문에 별도로 포스팅 해봤다.

📍 Security 계층

  • 먼저 로그인이 실패했을 때 실행되는 로직을 입력하는 로직을 추가했다.
    • 람다식이 가독성이 좋아서 사용해봤는데 만족도가 높다.

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@EnableMethodSecurity(prePostEnabled = true)
public class SecurityConfig {

		// 로그인 실패를 처리하는 객체 DI  (이 객체는 직접 구현해야 한다.)
		private final FailureHandler failureHandler;

@Bean
SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    return http
            .formLogin(
                    formLogin -> formLogin  // 일반 로그인 처리 url
                            .loginPage("/member/login")
            )
            .formLogin(
                    loginFail -> loginFail  // 로그인 실패 처리
                            .failureHandler(failureHandler)
            )
            .oauth2Login(
                    oauth2Login -> oauth2Login  // 소셜로그인 처리 url
                            .loginPage("/member/login")
            )
            .logout(
                    logout -> logout  // 로그아웃 처리 url
                            .logoutUrl("/member/logout")
            ).build();
}

📍 AuthenticationFailureHandler 상속

  • 로그인 실패를 처리하는 객체를 만드려면 AuthenticationFailureHandler 를 상속받아야 한다.
    • onAuthenticationFailure 를 오버라이딩 한다.
    • 이곳에서 밖에 사용하지 않을거기 때문에 SecurityConfig 객체에 같이 구현해주었다.
    • 이제 method 내부에 requestresponse 를 사용해 원하는 로직을 구현하면된다.
@Component
class FailureHandler implements AuthenticationFailureHandler {

    @Override
    public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
        //-- 로그인이 실패했을 때 작동되는 로직 입력 --//
    }
}
profile
잘못된 내용 PR 환영

0개의 댓글