inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링부트 JUnit 테스트 - 시큐리티를 활용한 Bank 애플리케이션

Jwt 인가필터 구현 및 등록완료

로그인 인증 실패 시 예외처리하는 주체는 어느 것인가요?

해결된 질문

1544

foodsmith96

작성한 질문수 10

0

기존에는 SecurityConfig 클래스의
SecurityFilterChain에서 아래의 코드가
로그인 실패 시 응답을 처리하는 주체였습니다.

 

http.exceptionHandling() // 인증 예외 설정 
        .authenticationEntryPoint((request, response, authenticationException)->{ // 예외 가로채기\
            CustomResponseUtil.fail(response, "로그인을 진행해주세요", HttpStatus.UNAUTHORIZED);
        });


그러다 JwtAuthenticationFilter를 만들면서
attemptAuthentication() 매서드가 실패 시 아래의
unsuccessfulAuthentication()가 실행되게끔 했구요.

@Override 
protected void unsuccessfulAuthentication(HttpServletRequest request,
                                    HttpServletResponse response,
                                    AuthenticationException failed) throws IOException, ServletException {

    CustomResponseUtil.fail(response, "로그인 실패", HttpStatus.UNAUTHORIZED); 
}

 

그래서 헷갈려서 실험해보니 기존의 SecurityFilterChain의 것은 주석처리해도 아무런
상관이 없고, unsuccessfulAuthentication()가
동작하더라구요.

이 두 코드의 차이는 정확히 어떤 것일까요?

spring-boot junit 소프트웨어-테스트

답변 2

0

최주호

아래의 AI 답변이 정확합니다!!

시큐리티 쪽에서 처리하는 실패 로직은, 인증이 필요한 자원에 접근할 때 발생하는 예외입니다.

내가 직접 로그인하려고 하다가 실패하게 되면

attemptAuthentication -> 실패 ->unsuccessfulAuthentication 가 동작합니다.

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.

로그인 인증 실패 시 예외처리하는 주체는 SecurityFilterChain이 아니라 AuthenticationEntryPoint 또는 AuthenticationFailureHandler 둘 중 하나입니다. 둘 다 같은 목적으로 사용되는데, 로그인 인증 실패 시 처리할 로직을 구현합니다.

AuthenticationEntryPoint는 인증되지 않은 사용자가 보호된 리소스에 액세스하려고 할 때 호출됩니다. 따라서 이를 이용하여 로그인 인증 실패 시 처리하는 로직을 구현할 수 있습니다.

AuthenticationFailureHandler는 인증을 실패하면 호출됩니다. 로그인 인증 실패 시 처리를 담당하는 Handler입니다.

두 가지 방법 중 하나를 선택하여 사용할 수 있으나 현재 코드에서는 AuthenticationFailureHandler인 unsuccessfulAuthentication() 메서드를 구현하여 실패 시 처리를 구현하였습니다. 따라서 SecurityFilterChain의 코드는 주석처리하여도 문제가 없으며, unsuccessfulAuthentication()가 동작하는 것입니다.

이전 코드에서 AuthenticationEntryPoint를 통해 실패 시 처리하던 로직을 AuthenticationFailureHandler로 옮긴 것으로 보여집니다.

참고로, SecurityFilterChain은 인증, 인가, 보안 등과 관련한 여러 Filter를 순차적으로 실행하는 구성요소입니다.

답변이 도움이 되었길 바랍니다.

요청/응답 DTO 관련 문의

0

170

2

안녕하세요 인증이 필요한 url을 위하여 /s를 붙이는것에 대해 질문있습니다.

0

161

1

validation aop사용에 대해서 질문있습니다.

0

245

2

Dummy 클래스 위치에 대한 질문

0

293

2

테스트 방식에 관해서 질문이 있어요

0

292

2

스프링 버전업일 경우에는 Pointcut @PostMapping 조건이 달라질까요?

1

434

1

equals와 longValue 관련 질문드립니다

0

328

1

계좌번호를 Long 타입으로 하는 이유가 무엇일까요?!

0

499

2

[정보공유] Hibernate 로그 작동 안하시는 분들!!

3

346

0

UserControllerTest 테스트 실패 문의

0

318

1

스프링 시큐리티 6.2 버전 이후로 apply() 메서드를 이용한 JwtAuthenticationFilter 가 등록이 안됩니다.

2

1106

1

import 오류

0

426

3

spring initializer gradle 에서 3.x.x 대 밖에 없어요. 2.x.x는 보이지 않는데 어떡하져

0

438

2

안녕하세요 로그엔 성공적으로 들어온것같습니다..

0

237

1

JwtAuthorizationfilter test mvc.performget 관련 질문입니다!

0

286

1

JwtAuthorizationfilter test mvc.performget 부

0

226

1

longValue() 질문

0

228

1

jwt 인가필터 규현및 등록

0

334

1

스프링부트 3버전

1

334

1

권한처리를 위한 세션강제주입

0

418

1

JwtVO 를 인터페이스로 만든 이유

0

359

1

계좌 조회 질문드립니다

0

229

1

DummyObject 에 대하여

0

308

2

DTO를 이너클래스로 계속추가하는 이유

0

695

2