IT/Spring
MockMvc 에 Spring Security Filter Chain 적용
최고영회
2020. 3. 26. 17:01
728x90
반응형
SMALL
Rest Docs 를 이용해 API 서버에 대한 테스트와 동시에 문서를 만들고 있다.
MockMvc 를 통해 각 API 에 대해서 쉽게 테스트 할 수 있다.
어느정도의 테스트가 완료 되고 이제 사용자 권한별 API 테스트를 진행하는데
@PreAuthorize("hasRole('ADMIN')")
위와 같이 annotation을 통해 API method에 대해 권한을 체크하도록 했는데 계속 오류가 발생한다...
이상하다.. SecurityContext 에서 권한을 찾을 수가 없다니.. 왜지?
그동안 jwt 를 통해 인증을 하고 jwtfilter 를 통해 Roles 을 부여 했었는데..
Boot 를 start 하고 postman 을 통해 테스트 해 보니 ... 잘된다.. 응???? 응???
다시 테스트 해보고 로그를 찍어보니 이상하게도 jwt 인증 filter chain 이 걸리지 않았다.
테스트 코드의 MockMovc 생성 부분을 살펴 보니 아래와 같았다.
@Before
public void setUp() throws ServletException {
this.document = document("{class-name}/{method-name}",
preprocessRequest(prettyPrint()),
preprocessResponse(prettyPrint()));
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
.apply(documentationConfiguration(this.restDocumentation))
.alwaysDo(document)
.build();
}
아... MockMvc 에 spring security filter chain 을 추가 해 줘야 하는구나..
@Before
public void setUp() throws ServletException {
this.document = document("{class-name}/{method-name}",
preprocessRequest(prettyPrint()),
preprocessResponse(prettyPrint()));
DelegatingFilterProxy delegateProxyFilter = new DelegatingFilterProxy();
delegateProxyFilter.init(
new MockFilterConfig(context.getServletContext(), BeanIds.SPRING_SECURITY_FILTER_CHAIN));
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.context)
.apply(documentationConfiguration(this.restDocumentation))
.addFilter(delegateProxyFilter)
.alwaysDo(document)
.build();
}
다시 테스트,, 잘된다.!!
728x90
반응형
LIST