Java 限制Spring Boot中每个t的请求

Java 限制Spring Boot中每个t的请求,java,spring-boot,Java,Spring Boot,我正在SpringBoot中编写REST服务,遇到了一个无法解决的问题。谷歌搜索了几个小时,但大多数例子对我来说似乎太复杂了,因为我对SpringBoot还不熟悉 假设用户可以将对象保存到我的数据库中: @RequestMapping(value = "/person", method = RequestMethod.GET) public void saveName (@RequestParam String name){ personRepository.save(new Perso

我正在SpringBoot中编写REST服务,遇到了一个无法解决的问题。谷歌搜索了几个小时,但大多数例子对我来说似乎太复杂了,因为我对SpringBoot还不熟悉

假设用户可以将对象保存到我的数据库中:

@RequestMapping(value = "/person", method = RequestMethod.GET)
public void saveName (@RequestParam String name){
    personRepository.save(new Person(name));
}

现在,我一直在试图找到一种方法,让匿名用户每分钟只能输入有限的条目。

即使客户端不是经过身份验证的用户,它仍然有自己的会话,因此您可以在会话中存储他添加的条目的数量。不要存储整数,而是存储时间的集合,因此,如果旧的时间超过一分钟,则可以删除它们。

您需要使用Spring Security解决此问题。您可以通过isAnonymous注释检查用户是否是匿名的,为了限制它,您可以使用表来捕获尝试。因为你对Spring Boot还不熟悉。最好还是重温一下Spring安全性,因为它为您提供了对它的细粒度控制。
如果您不想要spring安全性,那么同样的方法也适用,使用表来捕获未经验证的用户尝试。此外,还有一个默认会话id,您可以利用它,而不用费劲地获取Ip地址。

是否要这样做,以便特定Ip可以在规定的时间内发出有限的请求?您可以使用handlerInterceptor。这将在调用rest控制器本身之前调用。您可以重写预处理方法,然后根据中的条件,如果此ip在过去几分钟内发出了太多请求,则返回false。我想这正是我一直在寻找的。现在必须检查一下它是如何工作的。谢谢!您可以在httpServletRequest上使用getRemoteAddr方法来获取远程ip地址。我已成功拦截呼叫并获取ip,但我可以将其保存在哪里?我必须为此创建服务吗?