You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
packageorg.springframework.security.test.context.support;
importjava.lang.annotation.Annotation;
importorg.springframework.security.core.context.SecurityContext;
importorg.springframework.security.test.context.TestSecurityContextHolder;
/** * An API that works with WithUserTestExcecutionListener for creating a * {@link SecurityContext} that is populated in the {@link TestSecurityContextHolder}. * * @param <A> * @author Rob Winch * @since 4.0 * @see WithSecurityContext * @see WithMockUser * @see WithUserDetails */publicinterfaceWithSecurityContextFactory<AextendsAnnotation> {
/** * Create a {@link SecurityContext} given an Annotation. * @param annotation the {@link Annotation} to create the {@link SecurityContext} * from. Cannot be null. * @return the {@link SecurityContext} to use. Cannot be null. */SecurityContextcreateSecurityContext(Aannotation);
}
인터페이스의 Javadoc 내용을 보면 아래와 같다.
TestSecurityContextHolder 에 채워진 SecurityContext 를 만들기 위해 WithUserTestExecutionListener 와 함께 작동하는 API
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
-
문제 원인
JwtAuthenticationFiler
를 통해 SecurityContextHolder 에 넣어준 값을 사용 (@AuthenticationPrincipal)JwtAuthenticationFiler
를 거치지 않아 문제가 발생함.어떻게 해결할 수 있을까?
접근방법 1. 직접 값을 넣어주기
기존에 이와 같이 해결하려 하였으나, 중복된 코드가 많이 발생하여 간단하게 해결하고 싶어 적용하지 않음.
접근방법 2.
@WithMockUser
하지만, 프로젝트의 Member는
UserDetails
를 상속하지 않아 다른 방식으로 SecurityContextHolder 에 값을 넣어줘야 함.접근방법 3.
WithSecurityContextFactory
Mock User
를 넣어주는 방식문제 해결
JjakkakMockUser.java
JjakkakMockSecurityContext.java
이렇게 테스트용 SecurityContext를 만들어 MockUser를 만드는 방식으로 사용하였습니다.
테스트 예시
카테고리 조회 테스트
더 나아가서
WithSecurityContextFactory 인터페이스 내부를 살펴보면
인터페이스의 Javadoc 내용을 보면 아래와 같다.
TestSecurityContextHolder
에 채워진SecurityContext
를 만들기 위해WithUserTestExecutionListener
와 함께 작동하는 APIBeta Was this translation helpful? Give feedback.
All reactions