Блок Spring WebFlux Http.CONNECT метод

В нашей компании есть несколько тестов безопасности, в которых приложения тестируются по-разному. Один из них - попробовать CONNECT, например:

telnet localhost 8080
CONNECT http://test.com HTTP/1.1

и в этом случае вернуть 400 или 405. Существующие приложения Spring MVC возвращают 400, но кажется, что наше новое приложение Spring WebFlux: 5.1.2.RELEASE (сервер Netty) возвращает 200.

Первое, что я сделал, - это переключился на последнюю весеннюю версию WebFlux: 5.1.4.RELEASE, и в этом случае код HTTP-ошибки ответа был: 404, но все еще недостаточно. Поэтому я попытался:

  1. Создать веб-фильтр
  2. Измените фильтр CORS
  3. Изменить цепочку безопасности Spring

, но все эти решения не увенчались успехом. Как ты это исправил? Было бы неплохо создать собственный обработчик http?


person brebDev    schedule 18.01.2019    source источник


Ответы (1)


Я создал собственный обработчик http:

public class AppContextPathCompositeHandler extends ContextPathCompositeHandler {

public AppContextPathCompositeHandler(Map<String, ? extends HttpHandler> handlerMap) {
    super(handlerMap);
}

@Override
public Mono<Void> handle(ServerHttpRequest request, ServerHttpResponse response) {
    if (HttpMethod.CONNECT.name().equals(request.getMethodValue())) {
        response.setStatusCode(HttpStatus.METHOD_NOT_ALLOWED);
        return response.setComplete();
    }

    return super.handle(request, response);
}
}

и он был настроен так:

@Configuration
public class NettyReactiveWebServerConfig extends NettyReactiveWebServerFactory {
@Value("${server.context-path}")
private String contextPath;

@Override
public WebServer getWebServer(HttpHandler httpHandler) {
    Map<String, HttpHandler> handlerMap = new HashMap<>();
    handlerMap.put(contextPath, httpHandler);
    return super.getWebServer(new AppContextPathCompositeHandler(handlerMap));
}
}
person brebDev    schedule 22.01.2019