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

yoongdoo0819님의 프로필 이미지
yoongdoo0819

작성한 질문수

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

saveAccount_test (JWT 검증 및 시큐리티 세션 생성) 질문

해결된 질문

작성

·

378

0

안녕하세요, 강사님.

 

"계좌등록 컨트롤러 테스트" 강의에서 AccountController Test 코드 작성 시, 아래와 같이 saveAccount_test()에 궁금한 점이 있습니다.

위의 테스트 코드에서 @WithUserDetails(value = "ssar", setupBefore = TestExecutionEvent.TEST_EXECUTION) 어노테이션을 선언해줘야 하는 이유를 설명해주셨습니다.

 

그리고 request가 JWT 토큰이 없다고 하더라도 아래의 doFilterInternal 메서드를 실행하며 if문을 통과하지 못하더라도 chain.doFilter를 통해, 결국 컨트롤러단까지 간다고 말씀해주셨습니다.

위의 doFilterInternal 메서드 작성 시, if - else 문으로 작성하지 않은 이유가 테스트를 수월하게 할 수 있기 때문이라고 말씀해주셨습니다.

 

제가 궁금한 점은, 실무에서도 위의 코드처럼 JWT 토큰이 없는 request를 바로 차단하지 않고 컨트롤러단까지 흘려보내는지 여부가 궁금합니다.

 

제가 아직 시큐리티 측면을 잘 모르기 때문에 하는 질문이라고 생각해주시면 감사하겠습니다. 실제 배포/운영 환경에서는 테스트 코드를 편리하게 짜는 것보다 보안이 더 중요한 요소라고 생각되기에, JWT 토큰이 없는 request를 바로 차단할 수 있다면 즉시 차단하고 컨트롤러단까지 흘려보내지 않는 것이 더 안전하지 않을까 하는 생각이 들었습니다.

 

감사합니다.

답변 1

1

최주호님의 프로필 이미지
최주호
지식공유자

JWT 토큰을 필터에서 확인해서 걸러내려면

조건이 필요합니다.

/users/** 는 인증이 필요하고

/boards/** 는 인증이 필요하지 않다면!!

JWT 토큰에서 /users/**로 요청이 오면 토큰을 검사하고, /boards/**로 오면 토큰 검사를 하지 않고

이렇게 코드를 짜야 합니다.

 

저런 주소가 많게 되면, 토큰 검사를 위해 엄청난 if문이 필터에 필요하게 됩니다!!

우선 JWT 필터에서의 책임을 단순히 JWT 토큰이 있으면 세션을 만들고, 없으면 세션을 안만드는 책임만 부여하게 되면 시큐리티 필터에서 인증과 권한처리를 할 수 있게 때문에

아주아주 편하게 됩니다!!

그래서 저는 이렇게 사용하고 있습니다!!

어차피 세션이 없으면 컨트롤러까지 들어가지 못하고, 시큐리티 필터에서 걸러지게 되니 안심하셔도 됩니다

 

yoongdoo0819님의 프로필 이미지
yoongdoo0819

작성한 질문수

질문하기