#55 migrated swagger2 to openApi specification 3

This commit is contained in:
Fabio Formosa
2021-11-10 01:16:36 +01:00
parent 2ca2ba7ffc
commit c9b90478dd
5 changed files with 34 additions and 93 deletions

View File

@@ -1,59 +0,0 @@
package it.fabioformosa.quartzmanager.configuration;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.BasicAuth;
import springfox.documentation.service.Contact;
import springfox.documentation.service.VendorExtension;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurationSupport {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2).select()
.apis(RequestHandlerSelectors.basePackage("it.fabioformosa.quartzmanager.controllers")) //
.build() //
.apiInfo(apiInfo()) //
.securitySchemes(Arrays.asList(new BasicAuth("basicAuth")))
.securityContexts(Collections.singletonList(securityContext()));
}
@SuppressWarnings("rawtypes")
private ApiInfo apiInfo() {
String title = "QUARTZ MANAGER API";
String description = "Quartz Manager - REST API";
String version = "1.0.0";
String termsOfServiceUrl = null;
Contact contact = null;
String license = "Apache License 2.0";
String licenseUrl = "https://github.com/fabioformosa/quartz-manager/blob/master/LICENSE";
List<VendorExtension> vendorExtension = Collections.emptyList();
return new ApiInfo(title, description, version, termsOfServiceUrl, contact, license, licenseUrl, vendorExtension);
}
private SecurityContext securityContext() {
return SecurityContext.builder().forPaths(PathSelectors.any()).build();
}
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}

View File

@@ -1,4 +1,4 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
it.fabioformosa.quartzmanager.configuration.SchedulerConfig,\
it.fabioformosa.quartzmanager.configuration.SwaggerConfig,\
it.fabioformosa.quartzmanager.configuration.WebsocketConfig
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
it.fabioformosa.quartzmanager.configuration.SchedulerConfig,\
it.fabioformosa.quartzmanager.configuration.OpenApiConfig,\
it.fabioformosa.quartzmanager.configuration.WebsocketConfig

View File

@@ -51,7 +51,7 @@ import it.fabioformosa.quartzmanager.security.helpers.impl.QuartzManagerHttpSecu
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfigJWT extends WebSecurityConfigurerAdapter {
private static final String[] PATTERNS_SWAGGER_UI = {"/swagger-ui.html", "/v2/api-docs", "/swagger-resources/**", "/webjars/**"};
private static final String[] PATTERNS_SWAGGER_UI = {"/swagger-ui.html", "/v3/api-docs/**", "/swagger-resources/**", "/webjars/**"};
private static final String LOGIN_PATH = "/quartz-manager/api/login";
private static final String LOGOUT_PATH = "/quartz-manager/api/logout";

View File

@@ -1,25 +1,25 @@
package it.fabioformosa.quartzmanager.controllers;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
@RequestMapping
@Api(value = "Healthy Check")
public class QuartzManagerController {
@ResponseStatus(code = HttpStatus.OK)
@GetMapping("/")
public void healthyCheck() {
log.debug("Healthy check called");
}
}
package it.fabioformosa.quartzmanager.controllers;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestController;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RestController
@RequestMapping
public class QuartzManagerController {
@ResponseStatus(code = HttpStatus.OK)
@GetMapping("/")
@Operation(description = "Healthy Check")
public void healthyCheck() {
log.debug("Healthy check called");
}
}

View File

@@ -1,7 +1,6 @@
package it.fabioformosa.quartzmanager.controllers;
import javax.servlet.http.HttpSession;
import io.swagger.v3.oas.annotations.Operation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpEntity;
@@ -13,10 +12,9 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseStatus;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpSession;
@Controller
@ApiIgnore
@RequestMapping("/session")
public class SessionController {
@@ -25,6 +23,7 @@ public class SessionController {
@GetMapping("/invalidate")
@PreAuthorize("hasAuthority('ADMIN')")
@ResponseStatus(HttpStatus.NO_CONTENT)
@Operation(hidden = true)
public void invalidateSession(HttpSession session) {
session.invalidate();
log.info("Invalidated current session!");
@@ -32,6 +31,7 @@ public class SessionController {
@GetMapping("/refresh")
@PreAuthorize("hasAuthority('ADMIN')")
@Operation(hidden = true)
public HttpEntity<Void> refreshSession(HttpSession session) {
return new ResponseEntity<>(HttpStatus.OK);
}