猿问

Spring WebFlux 块 Http.CONNECT 方法

我们在公司周围进行了一些安全测试,其中应用程序以不同的方式进行测试。其中之一是尝试像这样的连接:

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

在这种情况下返回 a 400or 405。现有的 Spring MVC 应用程序返回 a 400,但似乎我们的新 Spring WebFlux: 5.1.2.RELEASEapp(Netty server) 返回 a 200

我做的第一件事是切换到最新的 spring WebFlux 版本:5.1.4.RELEASE,在这种情况下,响应 http 错误代码是:404,但仍然不够好。所以我试图:

  1. 创建一个网络过滤器

  2. 修改 CORS 过滤器

  3. 修改 Spring Security 链

,但所有这些解决方案都失败了。你是怎么解决的?创建自定义 http 处理程序是个好主意吗?


慕盖茨4494581
浏览 141回答 1
1回答

扬帆大鱼

我创建了一个自定义 http 处理程序:public class AppContextPathCompositeHandler extends ContextPathCompositeHandler {public AppContextPathCompositeHandler(Map<String, ? extends HttpHandler> handlerMap) {&nbsp; &nbsp; super(handlerMap);}@Overridepublic Mono<Void> handle(ServerHttpRequest request, ServerHttpResponse response) {&nbsp; &nbsp; if (HttpMethod.CONNECT.name().equals(request.getMethodValue())) {&nbsp; &nbsp; &nbsp; &nbsp; response.setStatusCode(HttpStatus.METHOD_NOT_ALLOWED);&nbsp; &nbsp; &nbsp; &nbsp; return response.setComplete();&nbsp; &nbsp; }&nbsp; &nbsp; return super.handle(request, response);}}它的配置如下:@Configurationpublic class NettyReactiveWebServerConfig extends NettyReactiveWebServerFactory {@Value("${server.context-path}")private String contextPath;@Overridepublic WebServer getWebServer(HttpHandler httpHandler) {&nbsp; &nbsp; Map<String, HttpHandler> handlerMap = new HashMap<>();&nbsp; &nbsp; handlerMap.put(contextPath, httpHandler);&nbsp; &nbsp; return super.getWebServer(new AppContextPathCompositeHandler(handlerMap));}}
随时随地看视频慕课网APP

相关分类

Java
我要回答