Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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 如何限制一个用户同时访问方法的次数_Java_Spring - Fatal编程技术网

Java 如何限制一个用户同时访问方法的次数

Java 如何限制一个用户同时访问方法的次数,java,spring,Java,Spring,我有一个项目,其中我只需要为一个用户同时提供5个访问方法的请求 对于eg用户1:已经向我的方法发送了6个同时请求,那么我的应用程序必须向他发送超过同时请求限制的错误 但同时,系统不应阻止来自多个用户的同时请求 for example user1 : sends 2 requests user 2 sends : 4 requests this should be accepted 这是我的示例控制器 @RequestMapping(value = "/sendRequest", method

我有一个项目,其中我只需要为一个用户同时提供5个访问方法的请求

对于eg用户1:已经向我的方法发送了6个同时请求,那么我的应用程序必须向他发送超过同时请求限制的错误

但同时,系统不应阻止来自多个用户的同时请求

for example
user1 : sends 2 requests
user 2 sends : 4 requests
this should be accepted
这是我的示例控制器

@RequestMapping(value = "/sendRequest", method = RequestMethod.POST)
    public @ResponseBody Response getSessionId(
            @PathParam("username") String username,
            @PathParam("password") String password) {


User user = checkAuth(username,password);

    response =  sendRequest.send; //I need to apply check on this call
}
有可能以任何方式这样做吗


我知道我们可以限制同时请求的数量,但是我们可以限制不同用户模拟请求的数量吗

您可以保留一个会话变量,您可以在每次调用sendRequest.send之前检查并增加该变量,然后在调用后减少该变量

//pseudo
int simultaneousRequests = session.get("simultaneousRequests") == null ? 0 : (int)session.get("simultaneousRequests");
if (simultaneousRequests >= 5) {
    throw SomeException();
}
session.put("simultaneousRequests", simultaneousRequests + 1);
response = sendRequest.send();
session.put("simultaneousRequests", simultaneousRequests - 1);
我建议您在需要节流的API调用中使用add-that过滤器。但是,您需要在每个HTTP请求(可能是HTTP头)中发送一个唯一标识符,以标识使用此方法的每个用户