본문 바로가기

개발

swagger 도입 (T-001)

반응형

T-001 프로젝트는 단기간에 완성을 해야하는 관계로 프론트까지 개발할 여력이 없습니다...

따라서 swagger를 도입하여 브라우저 단에서의 api 테스트를 해결하기로 결정하고 도입하였습니다

 

        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-boot-starter</artifactId>
            <version>3.0.0</version>
        </dependency>

위처럼 스타터 디펜던시를 추가해주면 되어 간편합니다

 

별도의 설정 없이 바로 swagger에서 제공해주는 api로 접속이 가능합니다

 

하지만...

 

csrf에 막혀 post 메소드가 전부 리젝되는 문제가 발생합니다

 

이를 해결하기 위해 아래와 같은 class 하나를 제작합니다

public class CsrfRequireMatcher implements RequestMatcher {

    private static final Pattern ALLOWED_METHODS = Pattern.compile("^(GET|HEAD|TRACE|OPTIONS)$");

    @Override
    public boolean matches(HttpServletRequest request) {
        if (ALLOWED_METHODS.matcher(request.getMethod()).matches())
            return false;

        final String referer = request.getHeader("Referer");
        if (referer != null && referer.contains("/swagger-ui")) {
            return false;
        }
        return true;
    }

}

 

이후 sec config에 아래와 같은 코드를 삽입해 줍니다

                http.csrf()
                .requireCsrfProtectionMatcher(new CsrfRequireMatcher())
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());

 

동작 방식은 ref 헤더에 swagger에서 넘어온 정보가 담겨있으면 적절하게 처리해주는 방식인 것 같습니다

 

참고 문헌

 

https://hyun-sun.github.io/2021-05-02-swagger/

반응형