java如何在ODL控制器中配置拒绝服务过滤器
我是ODL控制器和嵌入式码头的新手。 我想在jetty中添加DoSFilter。xml来限制请求泛滥时的REST请求
我试着在互联网上搜索,但有很多在网络上配置的例子。xml DoSFilter但对jetty没有太多帮助。xml
在jetty中配置DoSFilter的任何帮助。xml将非常有用
ODL-氮气版本
码头-9.2.21。X版本
以下是我迄今为止尝试过的选项
码头配置的过滤器。xml:
<Get name="handler">
<Call name="addHandler">
<Arg>
<New class="org.eclipse.jetty.servlet.ServletContextHandler">
<Set name="contextPath">/</Set>
<Set name="resourceBase">../</Set>
<Call name="addFilter">
<Arg>
<New class="org.eclipse.jetty.servlet.FilterHolder">
<Arg>
<New class="org.eclipse.jetty.servlets.DoSFilter" />
</Arg>
<Call name="setInitParameter">
<Arg>maxRequestsPerSec</Arg>
<Arg>30</Arg>
</Call>
<Call name="setInitParameter">
<Arg>delayMs</Arg>
<Arg>100</Arg>
</Call>
<Call name="setInitParameter">
<Arg>maxRequestMs</Arg>
<Arg>0</Arg>
</Call>
<Call name="setInitParameter">
<Arg>maxIdleTrackerMs</Arg>
<Arg>0</Arg>
</Call>
<Call name="setInitParameter">
<Arg>ipWhitelist</Arg>
<Arg>127.0.0.1</Arg>
</Call>
</New>
</Arg>
<Arg>/cxf/*</Arg>
<Arg>
<Call class="java.util.EnumSet" name="of">
<Arg>
<Get class="javax.servlet.DispatcherType" name="REQUEST" />
</Arg>
</Call>
</Arg>
</Call>
</New>
</Arg>
</Call>
</Get>
在web中配置的过滤器。xml:
<filter>
<filter-name>DoSFilter</filter-name>
<filter-class>org.eclipse.jetty.servlets.DoSFilter</filter-class>
<init-param>
<param-name>maxRequestsPerSec</param-name>
<param-value>1</param-value>
</init-param>
<init-param>
<param-name>delayMs</param-name>
<param-value>100</param-value>
</init-param>
<init-param>
<param-name>maxRequestMs</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>maxIdleTrackerMs</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>ipWhitelist</param-name>
<param-value>127.0.0.1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>DoSFilter</filter-name>
<url-pattern>/cxf/*</url-pattern>
</filter-mapping>
# 1 楼答案
因为您使用的是嵌入式Jetty,所以不需要Jetty。xml文件,而您可以通过API对此进行配置。下面是一个代码示例,它使用嵌入用法中的示例中的相同设置配置DoSFilter
我还建议您更新到Jetty的最新版本,因为Jetty-9.2已经过时,最新版本目前是Jetty-9.4.27