gpt4 book ai didi

java - 如何在 ODL Controller 中配置拒绝服务过滤器

转载 作者:行者123 更新时间:2023-12-01 11:17:49 26 4
gpt4 key购买 nike

我是 ODL Controller 和嵌入式 jetty 的新手。
如果有请求泛滥,我想在 jetty.xml 中添加 DoSFilter 来限制 REST 请求。

我尝试在互联网上搜索,但在 web.xml 中有很多配置它的示例 DoSFilter但没有找到对 jetty.xml 的太多帮助

在 jetty.xml 中配置 DoSFilter 的任何帮助都会有很大帮助。

ODL - 氮气版本

jetty - 9.2.21.X 版本

以下是我迄今为止尝试过的选项。

在 jetty.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>

最佳答案

因为您使用的是嵌入式 Jetty,所以您不需要 jetty.xml 文件,而是可以通过 API 进行配置。这是一个代码示例,它在嵌入式用法中使用与您的示例相同的设置配置 DoSFilter。

Server server = new Server();
ServerConnector connector = new ServerConnector(server);
server.addConnector(connector);

ServletContextHandler contextHandler = new ServletContextHandler();
contextHandler.setContextPath("/");
server.setHandler(contextHandler);

DoSFilter filter = new DoSFilter();
filter.setMaxRequestsPerSec(30);
contextHandler.addFilter(new FilterHolder(filter), "/*", EnumSet.of(DispatcherType.REQUEST));

server.start();
server.join();

我还建议您更新到最新版本的 Jetty,因为 jetty-9.2 已结束,目前最新版本为 jetty-9.4.27。

关于java - 如何在 ODL Controller 中配置拒绝服务过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60558708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com