以下为采访现场原图:采访者:界面被恶意刷屏,怎么办?我:这个我没做过(天天CRUD,真的没做过)面试官:如果现在让你做设计,你会怎么做?设计?我:呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜呜实现防刷的简单方法:注解修复防刷技术点涉及的技术点如下:自定义注解拦截器Redis的基本操作SpringBoot项目其实很简单,主要就是看业务。本文主要内容:自定义注解custom-annotationAccessLimit。importjava.lang.annotation.Retention;importjava.lang.annotation.Target;importstaticjava.lang.annotation.ElementType.METHOD;importstaticjava.lang.annotation.RetentionPolicy.RUNTIME;@Retention(RUNTIME)@Target(METHOD)public@interfaceAccessLimit{//次数上限intmaxCount();//是否需要登录booleanneedLogin()defaultfalse;}在配置文件中添加Redis配置项,添加Redis配置;spring.redis.database=0spring.redis.host=127.0.0.1spring.redis.port=6379spring.redis.jedis.pool.max-active=100spring.redis.jedis.pool.max-idle=100spring.redis.jedis.pool.min-idle=10spring.redis.jedis.pool.max-wait=1000ms注意在pom中引入了Redisstarter。org.springframework.bootspring-boot-starter-data-redis创建拦截器创建拦截器,拦截所有请求,防刷所有的主要内容都在这里。//一堆导入这里就不贴了,需要自己导入/***在处理方法上用AccessLimitEnum注解的方法*@authorjava后端技术全栈*@date2021/8/615:42*/@ComponentpublicclassFangshuaInterceptorextendsHandlerInterceptorAdapter{@ResourceprivateRedisTemplateredisTemplate;@OverridepublicbooleanpreHandle(HttpServletRequestrequest,HttpServletResponseresponse,Objecthandler)throwsException{System.out.println("----FangshuaInterceptor------");//判断请求是否属于方法的请求if(handlerinstanceofHandlerMethod){HandlerMethodhm=(HandlerMethod)handler;//检查室友在方法上是否有AccessLimit注解AccessLimitaccessLimit=hm.getMethodAnnotation(AccessLimit.class);if(accessLimit==null){returntrue;}//获取注解中的参数,intmaxCount=accessLimit.maxCount();booleanlogin=accessLimit.needLogin();Stringkey=request.getRequestURI();//防刷=相同请求路径+sameuser+day//if(login){//可以填写session获取用户相关信息//这里的userId暂时写死,LonguserId=101L;StringcurrentDay=format(newDate(),"yyyyMMdd");key+=currentDay+userId;}else{//可以根据用户ip+date来判断}//从redis对象中获取用户访问次数tcountCache=redisTemplate.opsForValue().get(key);if(countCache==null){//第一次访问,一天有效//时间单位定义redisTemplate.opsForValue().set(key,1,86400,TimeUnit.SECONDS);}else{Integercount=(Integer)countCache;if(count