2015-05-20 2 views
0

У меня есть проект, в котором мне нужно предоставить только 5 одновременных запросов на доступ к методу для одного пользователя.Как ограничить число одновременного доступа к методу одним пользователем

Например, пользователь 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 
} 

образец Можно ли делать в любом случае.

Я знаю, что мы можем душить количество одновременных запросов, но мы можем душить количество simulatneous запросов от различных пользователей

ответ

0

Вы можете сохранить переменную сеанса, который вы бы проверить и увеличить перед каждым вызовом 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); 
0

Я предлагаю вам использовать j2ee filter добавить, что фильтр вызовов API, где дроссельный необходимо. Но вам нужно будет отправить уникальный идентификатор вместе с каждым HTTP-запросом (возможно, HTTP-заголовком), чтобы идентифицировать каждого пользователя для использования этого метода.

Смежные вопросы