Spring Boot 2 - swagger 설정 시 오류(login창, Whitelabel Error Page)

JeongEun Kim·2023년 6월 15일
1

프로젝트

목록 보기
1/1

최근 프로젝트를 진행하다 보니, 백엔드 자체의 로직 구현보다 환경설정 내에서 오류가 생기는 경우가 제법 많았다. 자주 보는 오류 중, swagger를 설정하면서 보이는 오류를 두 가지 정리하고자 한다.

swagger로 접속하면 로그인 창이 나오는 오류

스웨거에 접속하기 위해서 아래의 링크로 접속했을 시, 우리가 알던 스웨거 창이 아니라 위와 같은 로그인 화면으로 리다이렉트되며 뜨는 경우가 있다.
http://localhost:9999/swagger-ui.html
해당 로그인 창에서 Username에 user를 입력하고, Password에 서버 실행시, 콘솔창에 뜬 비밀번호(아래 캡처 참고)를 입력하면 스웨거 페이지로 이동이 가능하다.


로그인 화면을 없애고 바로 swagger 화면을 띄우기 위해서는 자격 증명을 생략하기 위한 설정이 필요하다. 해당 설정은 SecurityConfiguration.java 파일 내에서 설정해주면 된다.

// SecurityConfig.java 설정

@Configuration
@EnableWebSecurity
@RequiredArgsConstructor
@EnableMethodSecurity
public class SecurityConfiguration {

	@Bean
	public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
		http.cors().configurationSource(corsConfigurationSource())
        .and().csrf().disable().sessionManagement().
        sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
		.authorizeHttpRequests().antMatchers(
			// Swagger 허용 URL
			"/v2/api-docs", "/v3/api-docs", "/v3/api-docs/**", "/swagger-resources",
			"/swagger-resources/**", "/configuration/ui", "/configuration/security", "/swagger-ui/**",
			"/webjars/**", "/swagger-ui.html")
		.permitAll().anyRequest().authenticated();
		return http.build();
	}
    
}



Whitelabel Error Page 오류

올바르게 스웨거에 접속했다고 생각했지만, 다음과 같은 창이 뜨며 내용이 제대로 나타나지 않을 때가 있다.
그 때는, SwaggerConfiguration.java 파일에 다음과 같이 addResourceHandlers를 추가해주면 된다.

@EnableSwagger2
@Configuration
public class SwaggerConfig implements WebMvcConfigurer {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                .apiInfo(apiInfo());
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
}

해당 과정을 거치면 위 사진과 같이 스웨거가 제대로 출력된다.

0개의 댓글

Powered by GraphCDN, the GraphQL CDN