Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用APISpark Restlet扩展限制对Restlet资源的请求_Java_Restlet_Apispark - Fatal编程技术网

Java 使用APISpark Restlet扩展限制对Restlet资源的请求

Java 使用APISpark Restlet扩展限制对Restlet资源的请求,java,restlet,apispark,Java,Restlet,Apispark,以下是我限制每分钟请求数的代码: MethodAuthorizer ma = createMethodAuthorizer(); ma.setNext(router); FirewallRule rule = new PeriodicFirewallCounterRule(60, TimeUnit.SECONDS, new IpAddressCountingPolicy()); ((PeriodicFirewallCounterR

以下是我限制每分钟请求数的代码:

        MethodAuthorizer ma = createMethodAuthorizer();
        ma.setNext(router);

        FirewallRule rule = new PeriodicFirewallCounterRule(60, TimeUnit.SECONDS, new IpAddressCountingPolicy());
        ((PeriodicFirewallCounterRule)rule).addHandler(new RateLimitationHandler(new UniqueLimitPolicy(10)));
        FirewallFilter firewallFiler = new FirewallFilter(getContext(), list(rule));
        firewallFiler.setNext(ma);

        return ma;

问题是没有错误,但即使从资源中请求了10个以上的请求,它也不会抛出“太多请求”

我使用GAE项目中的配置代码和开发服务器使其工作

我使用Restlet的2.3.1版/GAE的1.9.18版和以下代码作为客户端:

public static void main(String[] args) {
    int i = 0;
    try {
        while (i < 30) {
            ClientResource cr = new ClientResource("http://localhost:8080/test");
            Representation repr = cr.get();
            System.out.println(">> call #"+i);
            Thread.sleep(100);

            i++;
        }
    } catch (Exception ex) {
        System.out.println(">> call #" + i + " failed");
        ex.printStackTrace();
    }
}
希望它能帮助你,
Thierry

您还可以依赖框架的ApisparkService(我已经使用v2.3.2版对其进行了测试):

public TestApplication() {
    super();
    ApiSparkService as = new ApiSparkService();
    as.setFirewallEnabled(true);
    as.getFirewallConfig().addIpAddressesPeriodicCounter(60, TimeUnit.SECONDS, 10);
    getServices().add(as);
}

你能给我你使用的Restlet版本吗?谢谢谢谢@thierry的提示!
public TestApplication() {
    super();
    ApiSparkService as = new ApiSparkService();
    as.setFirewallEnabled(true);
    as.getFirewallConfig().addIpAddressesPeriodicCounter(60, TimeUnit.SECONDS, 10);
    getServices().add(as);
}