Spring WebFlux блок Http.CONNECT метод - PullRequest
0 голосов
/ 18 января 2019

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

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 Security chain

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

1 Ответ

0 голосов
/ 22 января 2019

Я создал собственный обработчик 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));
}
}
...