inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

계좌등록 서비스 테스트

@AuthenticationPrincipal 사용이 가능한 이유가

1555

ykmykm4608

작성한 질문수 8

0

처음에 로그인시 헤더에 jwt 토큰이 저장되고

securityContextholder, 시큐리티 세션에 저장된 loginUser가 stateless 설정에 의해 삭제 되지

계좌등록 컨트롤러에 @AuthenticationPrincipal로 세션에 저장된 loginUser를 사용이 가능한 이유가

JwtAuthrizaitionFilte에서

아래 코드로 securityContextholder에 인증이나 권한체크용으로 저장 되기 떄문에 사용이 가능한걸까요? 맞는거같은데 확실해지고자 여쭤봅니다...

Authentication authentication = new UsernamePasswordAuthenticationToken(loginUser, null, loginUser.getAuthorities());
//강제로 authentication 객체를 생성

SecurityContextHolder.getContext().setAuthentication(authentication); //강제 로그인

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

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴이에요.
@AuthenticationPrincipal을 사용할 수 있는 이유는 JwtAuthrizaitionFilte에서 SecurityContextHolder.getContext().setAuthentication(authentication); 코드를 통해 SecurityContextHolder에 인증 객체를 저장하기 때문입니다.

JwtAuthrizaitionFilte에서는 인증에 성공한 사용자 정보를 가지고 UsernamePasswordAuthenticationToken 객체를 생성하고, SecurityContextHolder에 저장해 세션에 해당 사용자 정보를 유지시킵니다. 이렇게 저장된 사용자 정보는 @AuthenticationPrincipal을 사용하여 컨트롤러에서 쉽게 사용할 수 있습니다.

즉, @AuthenticationPrincipal은 시큐리티 컨텍스트 홀더에 저장된 인증 객체의 principal(사용자)을 가져와 사용하는 어노테이션입니다.

위의 코드를 통해 SecurityContextHolder에 Authentication 객체를 저장하면, 해당 사용자의 인증 정보를 활용할 수 있는 상태가 되고, @AuthenticationPrincipal을 통해 loginUser와 같은 정보를 접근할 수 있습니다.

이 부분이 해결되셨길 바랍니다. 추가로 궁금한 점이 있으면 답변해주세요. 감사합니다.

요청/응답 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