java—如何在传统的SpringMVC应用程序中添加请求超时或连接超时来防止“慢速http post漏洞”?

vzgqcmou  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(420)

以下几点让您了解我的申请:
我有一个传统的springweb应用程序运行在wildfly上。
在我的应用程序中,我有视图控制器和其他控制器。
我有web.xml文件和jbossxml文件来配置上下文路径。
对控制器的请求通过ajax请求或来自浏览器的简单get请求来实现。
我想保护我的应用程序不受可能的“慢速http post漏洞”的影响。为此,我决定,如果任何请求占用的时间超过了指定的时间,那么我的应用程序将释放该连接并抛出请求超时异常。
我的问题是:如何在传统的springmvc应用程序中实现请求时间?
注意:如果您有任何其他解决方案来防止“慢速http post漏洞”,那么您将非常受欢迎。

nafvub8i

nafvub8i1#

您可以将每个控制器调用委托给一个单独的线程,然后监视该线程,直到它违反超时条件。 java 的 ExecutorService 已经用它的 awaitTermination() 功能。
使用spring对异步控制器的支持(或者更一般地说;实现非阻塞服务(non-blocking services)将使这种方法正式化,因为(a)它将强制您将控制器调用委托给一个单独的线程池,(b)它将鼓励您安全地管理此线程池中可用的资源。更多关于这种方法的细节。
但是,无论您如何执行此委派,一旦您在一个单独的线程中运行每个控制器调用(我的意思是,与原始调用不同),您就可以控制该线程可以运行多长时间,如果它超过某个配置的超时,您就可以使用相关的http状态进行响应。

相关问题