Я использую Swagger с Spring MVC. Я бы хотел выборочно отключить swagger в определенных средах (например, Production). Как я могу это сделать?Отключение Swagger с пружиной MVC
ответ
В случае, если вы используете версию 1.x из springfox ранее чванство-SpringMVC
При настройке чванство SpringMVC плагина вы можете использовать метод enable
, к которому вы можете передать в логическом значении на основе среды/профиль и т.д.
@Bean
public SwaggerSpringMvcPlugin customImplementation(){
return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
.apiInfo(apiInfo())
.enable(environmentSpeficicBooleanFlag) //<--- Flag to enable or disable possibly loaded using a property file
.includePatterns(".*pet.*");
}
Другой способ сделать это с помощью пружинных профили
@Bean
@Profile("production")
public SwaggerSpringMvcPlugin customImplementation(){
return new SwaggerSpringMvcPlugin(this.springSwaggerConfig)
.apiInfo(apiInfo())
.enable(false) //<--- Flag set to false in the production profile
.includePatterns(".*pet.*");
}
в случае, если вы используете 2 .x версия springfox
При настройке вашей развязность весна-MVC плагин вы можете использовать метод enable
, к которому вы можете передать в логическое значение на основе среды/профиль и т.д.
@Bean
public Docket customImplementation(){
return new Docket(SWAGGER_2)
.apiInfo(apiInfo())
.enable(environmentSpeficicBooleanFlag) //<--- Flag to enable or disable possibly loaded using a property file
.includePatterns(".*pet.*");
}
Другой способ сделать он использует пружинные профили
@Bean
@Profile("production")
public Docket customImplementation(){
return new Docket(SWAGGER_2)
.apiInfo(apiInfo())
.enable(false) //<--- Flag set to false in the production profile
.includePatterns(".*pet.*");
}
Привет, Dilip, Спасибо за ответ. У меня была работа с использованием флага, специфичного для среды. Только если флаг является истинным, я вызываю метод initiallize() в моем пользовательском SwaggerSpringMvcPlugin. – ConfusionPrevails
Не могли бы вы покончить с трюком свадьбы? См. Здесь: http://stackoverflow.com/documentation/swagger/commit – Stephan
К сожалению, это не работает для меня с Spring 1.4.1 и Swagger 2.6.1, ошибка возникает до вызова методов конфигурации. –
Ответ Дилиппа - это то, о чем вы просили (я еще не проверял его). Но у меня есть дополнительный сценарий для решения проблемы, который может представлять интерес: в публичном ящике я хочу, чтобы документация была включена, но была закрыта.
Я добавил следующее к моей WebMvcConfigurerAdapter, который добавляет Basic Auth
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SwaggerInterceptor())
.addPathPatterns("/api-docs");
}
private class SwaggerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (!authHeaderValid(request.getHeader("Authorization"))) {
response.addHeader("Access-Control-Allow-Origin", "null");
response.addHeader("WWW-Authenticate", "Basic realm=\"\"");
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
response.getWriter().println("HTTP Status " + HttpServletResponse.SC_UNAUTHORIZED);
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { }
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { }
private boolean authHeaderValid(String authorization) {
if (authorization != null && authorization.startsWith("Basic ")) {
final String[] values = new String(Base64.getDecoder().decode(authorization.substring("Basic ".length()))).split(":");
return values[0].equals("username") && values[1].equals("password");
}
return false;
}
}
Это легче реализовать используя Spring Security вместо кодирования вашего собственного подхода к аутентификации? –
Вы пытаетесь таким образом
@Configuration
@EnableSwagger
// Loads the spring beans required by the framework
public class MySwaggerConfig
{
private SpringSwaggerConfig springSwaggerConfig;
/**
* Required to autowire SpringSwaggerConfig
*/
@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig)
{
this.springSwaggerConfig = springSwaggerConfig;
}
/**
* Every SwaggerSpringMvcPlugin bean is picked up by the swagger-mvc
* framework - allowing for multiple swagger groups i.e. same code base
* multiple swagger resource listings.
*/
@Bean
public SwaggerSpringMvcPlugin customImplementation()
{
return new SwaggerSpringMvcPlugin(this.springSwaggerConfig).apiInfo(apiInfo()).includePatterns(
".*?");
}
private ApiInfo apiInfo()
{
ApiInfo apiInfo = new ApiInfo(
"xx",
"xxxx",
"My Apps API terms of service",
"xxx",
null,
null);
return apiInfo;
}
}
ПОМ чванство-SpringMVC. veriosn является 0.9.5,
запуска сервера после запроса http://localhost:8080/appName/api-docs
Как это отвечает на вопрос OP? –
В этом ответе нет ничего, что объясняет, как Swagger можно включить/отключить на основе того, работает ли приложение в dev vs prod? –
- 1. Тимелеар с пружиной MVC + Swagger
- 2. Совместимость с пружиной и пружиной-mvc
- 3. AJAX с пружиной MVC
- 4. ESAPI с пружиной mvc
- 5. TideSDK с пружиной MVC
- 6. Мастер с пружиной MVC
- 7. Кодировка с пружиной MVC
- 8. Неопределенные бобы с пружиной MVC
- 9. Встраиваемый причал с пружиной MVC
- 10. JSP-формы с пружиной mvc
- 11. Использование плиток с пружиной MVC
- 12. Интеграция с эластичным поиском с пружиной MVC
- 13. Первые шаги с freemarker с пружиной mvc
- 14. Swagger Spring mvc reponsebody
- 15. Перехватить клиент с пружиной?
- 16. Ajax вызов с пружиной MVC и Hibernate
- 17. JUnit test web.xml с пружиной MVC
- 18. A/B, многовариантное тестирование с пружиной MVC
- 19. Разбор тела запроса JSON с пружиной MVC
- 20. Лист тимьяна без рендеринга с пружиной mvc
- 21. CRUD с пружиной MVC - сухие предложения
- 22. Подтверждение формы тимеляфа с пружиной MVC
- 23. Интеграция Hippo CMS с пружиной MVC
- 24. Настраиваемый сервлет кометы с пружиной MVC
- 25. Ошибка при интеграции jmeter с пружиной mvc
- 26. Нитки и спящий режим с пружиной MVC
- 27. Использование jackson с пружиной mvc 2.5
- 28. @ApiModelProperty Swagger-Mvc
- 29. ошибка с пружиной 3.1.2
- 30. Угловая 2 с пружиной mvc 4.2.6 и пружиной безопасности 4.0.1 с фильтром CORS
Практически ничего. Я совершенно не знаком с Сваггером. Я пытался выяснить, будет ли настройка jacksonScalaSupport.setRegisterScalaModule (false) в SwaggerConfig работать – ConfusionPrevails