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
'IT > Spring' 카테고리의 다른 글
Spring Boot SSL 설정 팁 (alias 문제, jasypt를 이용한 암호화) (2) | 2020.06.15 |
---|---|
Spring Rest Docs (0) | 2020.05.22 |
Spring Boot HTTPS 설정 & WebClient HTTPS (0) | 2020.02.20 |
AOP - 필요할 때 마다 알아서 해 줄테니 넌 핵심 로직에 집중해 (0) | 2020.01.31 |
Spring Boot - setupMultipart(ManagedServlet.java:170) (0) | 2020.01.21 |