Как отключить swagger-ui в продакшене (Thorntail)?

У меня есть приложение, созданное с помощью Wildfly Swarm (теперь Thorntail), и я интегрировал Swagger с моим REST API для документации, а также использую его для тестирования с Swagger-UI.

Я хотел бы знать, можно ли отключить часть Swagger-UI при развертывании приложения в производственной среде. Я попытался заглянуть в документацию по чванству, чтобы узнать, есть ли для этого какие-либо свойства, но не смог их найти. То же самое в документации Thorntail.

Одним из возможных решений было бы отключить зависимость maven от swagger-ui через профиль maven, когда я создаю jar. Я бы хотел избежать этого, потому что тогда мне понадобится одна банка для производства и одна для разработки.

Я видел много предложений, но они кажутся специфичными для Spring Boot, например этот Как отключить swagger-ui в рабочей среде


person Willyan    schedule 13.02.2019    source источник
comment
К сожалению, в настоящее время для этого нет решения. issues.jboss.org/browse/THORN-1566   -  person Ken    schedule 13.02.2019
comment
@Ken, возможно, это можно сделать с помощью фильтров запросов сервлетов docs.oracle.com/javaee /7/tutorial/servlets006.htm Если путь - / swagger-ui / *, проверьте свойства, чтобы узнать, разрешаем ли мы доступ или нет. Это скорее работа, но она может сработать.   -  person ktulinho    schedule 13.02.2019
comment
Фильтры @ktulinho не работают, потому что чванство работает как параллельное приложение на сервере. Мое приложение работает в localhost / myApp, а swagger - в localhost / swagger-ui /. Когда я вызываю API swagger с помощью http://localhost/swagger-ui/index.html?url=http://localhost/swagger.json, при этом swagger выполняет вызов моего приложения с использованием URI /swagger.json, поэтому, если я попытаюсь перенаправить страницу, это не сработает. Короче говоря, URI swagger-ui не отображается для моего приложения.   -  person Willyan    schedule 14.02.2019


Ответы (1)


Я бы порекомендовал разместить собственный экземпляр swagger-ui и не использовать тот, что находится в шипе, потому что я считаю swagger-ui инструментом разработки, который я бы не использовал напрямую в сервисе шипа.

Если swagger-ui размещается как внешняя автономная служба, и вам нужна только одна установка для всех разработчиков, потому что это только html и javascript, тогда вам нужно только позаботиться о CORS в вашей службе для конечной точки, предоставляющей * / swagger.json . Предоставление swagger.json в производственной среде не должно быть проблемой, потому что это всего лишь документация вашего rest api.

См. Следующий пример для реализации фильтра CORS, скопированного из проблемы CORS в веб-приложении Java

public class CorsFilter implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "POST, GET, HEAD, OPTIONS");
        response.setHeader("Access-Control-Allow-Headers", "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
      if ("OPTIONS".equalsIgnoreCase((HttpServletRequest) servletRequest.getMethod())) {
        response.setStatus(HttpServletResponse.SC_OK);
      } else {
         filterChain.doFilter(servletRequest, response);
      }

    }

    @Override
    public void destroy() {

    }
}               

Здесь вы увидите, как включить фильтр сервлетов.

<filter>
  <filter-name>CorsFilter</filter-name>
  <filter-class>org.apache.catalina.filters.CorsFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>CorsFilter</filter-name>
  <url-pattern>/swaggerJsonEndpoint/*</url-pattern>
</filter-mapping>
person Thomas Herzog    schedule 31.03.2019