有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    因为您使用的是嵌入式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