当前位置: 首页 > 知识库问答 >
问题:

Spring WebFlux块Http.CONNECT方法

百里意智
2023-03-14

我们公司有一些安全测试,其中应用程序以不同的方式进行测试。其中之一是尝试连接,如:

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

在这种情况下,返回400405。现有的SpringMVC应用程序返回一个400,但我们新的SpringWebFlux:5.1.2.RELEASEapp(Netty server)返回一个200

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

  1. 创建一个webFilter
  2. 修改CORS过滤器
  3. 修改Spring Security链

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

共有1个答案

董小林
2023-03-14

我已经创建了一个自定义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));
}
}
 类似资料:
  • 我希望为每个请求生成唯一的traceId,并将其传递给所有服务。在SpringMVC中,使用MDC上下文并将traceId放在头文件中相当容易,但在反应式堆栈中,由于ThreadLocal,它根本不起作用。 一般来说,我希望使用单个traceId记录我拥有的每个服务上的每个请求和响应,该traceId可以识别整个系统中的特定操作。 我试图根据文章创建自定义过滤器:https://azizulhaq

  • 我试图让服务器发送的事件与Mozilla Firefox一起工作。给定一个Spring Boot的网络服务 使用Chrome浏览器或Edge(始终是最新版本)可以正常工作。我可以在网络分析器选项卡中看到未完成的请求,并且每秒都会显示一个新的时间戳。 然而,当我使用Firefox(84.0.2或更早版本)时,请求也会显示在网络选项卡中,但不会显示响应头或流数据。当我终止Spring后端时,Firef

  • 我正在使用reactive mongodb开发简单的spring webflux演示应用程序,我想按姓名读取员工的所有数据,但不包括姓名字段“joe”、“Sara”、“joe”、“Sara”,我有如下代码: //仓库接口 //服务类

  • 在什么情况下Spring webflow会进行订阅?我在任何地方都读到必须有订阅,否则不会发生任何更改。在我使用Spring Webflow的短暂时间里,我从未在控制器或服务中见过。 我的疑问还在于,在使用flatMap时,。。。等订阅在什么时候进行? 我所读的并不能真正解决我的疑虑。 我知道这是一个异步问题,但每个flatMap都同时运行?。。。所以有时候我注意到一些数据是空的。

  • 我的理解是单声道 我说得对吗? 如果没有,单声道之间的区别是什么

  • 主要内容:Java13 文本块方法的示例Java 12 引入了文本块来处理多行字符串,如 JSON/XML/HTML 等,并向 String 类添加了新方法来处理文本块。这是一个预览功能。 stripIndent() : 从字符串的开头和结尾删除附带的空格。 translateEscapes() : 根据字符串语法翻译转义序列。 formatted() : 类似于 String format() 方法,支持文本块字符串中的格式化。 Ja