添加时间戳校验位
比如给客户端提供一个timestamp参数,值是13位的毫秒级时间戳,可以在第12位或者13位做一个校验位,通过一定的算法给其他12位的值做一个校验。
举例:现在实际时间是 1684059940123,我把前12位通过算法算出来校验位的值是9,参数则把最后一位改成9,即1684059940129,值传到服务端后通过前十二位也可以算出来值,来判断这个时间戳是不是合法的。
生成校验位的算法要确保前后端一致,比如校验位的值都取倒数第二位的值(可过滤掉90%)恶意请求。
添加拦截器防止接口恶意狂刷
其实也就是spring拦截器来实现。在需要防刷的方法上,加上防刷的注解,拦截器拦截这些注解的方法后,进行接口存储到redis中。当用户多次请求时,我们可以累积他的请求次数,达到了上限,我们就可以给他提示错误信息。
添加注解
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface AccessLimit {
int seconds();
int maxCount();
}
自定义拦截器
public class SessionInterceptor extends HandlerInterceptorAdapter {
private static final Logger logger = LoggerFactory.getLogger(SessionInterceptor.class);
@Autowired
private UserAuthService userAuthService;
&n

文章介绍了如何通过Spring拦截器配合Redis实现接口防刷功能,使用时间戳校验位并设置访问次数限制,当达到上限时阻止恶意请求。同时,文章详细展示了如何添加注解和自定义拦截器的工作原理。
最低0.47元/天 解锁文章
1199

被折叠的 条评论
为什么被折叠?



