Перехват и переадресация запроса при весенней загрузке - PullRequest
0 голосов
/ 12 марта 2020

Мы настроили базовый путь в нашем API для использования "/api", используя server.servlet-path=/api в application.properties, и теперь документация по swagger доступна по адресу http://host:port/api/swagger-ui.html

Но так же доступна документация по всем нашим услугам на http://host:8080/swagger-ui.html мы хотим, чтобы этот сервис также обслуживался по тому же пути.

Теперь я хочу перехватить вызов API на http://host:8080/swagger-ui.html и перенаправить его на http://host:8080/api/swagger-ui.html.

@RestController
@RequestMapping(path = "/")
public class SwaggerRedirectController {

    @GetMapping(value = "/swagger-ui.html")
    public void redirectToTwitter(HttpServletResponse httpServletResponse) throws IOException {
        httpServletResponse.sendRedirect("https://host/api/swagger-ui.html");

Поскольку мы уже установили базовый путь на "/ api", хотя запрос приходит к /swagger-ui.html, он добавляется с "/ api" в качестве базового пути и не затрагивает это пользовательский API.

Я хочу перехватить этот запрос и удалить из него "/api", чтобы он поразил этот пользовательский API, который в конечном итоге перенаправил /api/swagger-ui.html

Возможно ли это? или любые другие способы сделать это

1 Ответ

1 голос
/ 12 марта 2020

Да, вы можете перенаправить указанные c запросы на другой путь, используя Interceptor

Вот пример, который показывает, как вы можете это сделать:

@Component
public class CustomInterceptor extends HandlerInterceptorAdapter {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Override
    public boolean preHandle(HttpServletRequest requestServlet, HttpServletResponse responseServlet, Object handler) throws Exception {
        if (requestServlet.getRequestURI().equals("/swagger-ui.html")){
            responseServlet.sendRedirect("/api/swagger-ui.html");
            logger.info("redirect request for url: {} to: /api/swagger-ui.html", requestServlet.getRequestURI());
            return false;

        }
        return super.preHandle(requestServlet, responseServlet, handler);
    }
}

Редактировать :

Я забыл добавить класс конфигурации для активации перехватчика. Мой плохой, извини. Вот класс конфигурации для активации этого перехватчика:

@Configuration
public class Config implements WebMvcConfigurer {
    @Autowired
    CustomInterceptor customInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(customInterceptor);
    }
}
...