言简意赅
1.自定义一个annotion注解,标记那些想防止重复提交的方法。
2.利用自定义的拦截器或者aop,拦截住刚刚标记的方法。
3.获取redis中是否存在相同的请求,如果存在且时间间隔极短,此次视为重复性请求。
4.方法末尾将本次请求信息保存到redis中,供做下次请求的判断依据。
上代码
// 自定义注解
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RepeatSubmit{}
// 设置自定义拦截器
@Component
public abstract class RepeatSubmitInterceptor extends HandlerInterceptorAdapter
{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception
{
if (handler instanceof HandlerMethod)
{
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
// 判断请求的方法是否被自定义的注解标记
RepeatSubmit annotation = method.getAnnotation(RepeatSubmit.cla