zoukankan      html  css  js  c++  java
  • springboot 重复提交





    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    @Inherited
    public @interface DuplicateSubmitToken {

    String key() default "";
    }





    @Aspect
    @Configuration
    public class LockMethodAop {

    private static final Cache<String, Object> CACHES = CacheBuilder.newBuilder()
    // 最大缓存 100 个
    .maximumSize(1000)
    // 设置写缓存后 5 秒钟过期
    .expireAfterWrite(1, TimeUnit.SECONDS)
    .build();

    @Autowired
    HttpServletRequest request;

    @Around("execution(* tz.lion.inv.manage.controller..*.*(..)) && @annotation(tz.lion.inv.manage.annotation.DuplicateSubmitToken)")
    public Object interceptor(ProceedingJoinPoint pjp) {
    MethodSignature signature = (MethodSignature) pjp.getSignature();
    Method method = signature.getMethod();
    DuplicateSubmitToken localLock = method.getAnnotation(DuplicateSubmitToken.class);
    String key = localLock.key()+request.getSession().getId();
    if (!StringUtils.isEmpty(key)) {
    if (CACHES.getIfPresent(key) != null) {
    throw new Exception(ErrorMsg.FORM_SUBMIT_REPEAT);
    }
    // 如果是第一次请求,就将 key 当前对象压入缓存中
    CACHES.put(key, key);
    }
    try {
    return pjp.proceed();
    } catch (Throwable throwable) {
    throw new RuntimeException("服务器异常");
    } finally {
    // CACHES.invalidate(key);
    }
    }
    }
  • 相关阅读:
    sqlserver中判断表或临时表是否存在
    Delphi 简单方法搜索定位TreeView项
    hdu 2010 水仙花数
    hdu 1061 Rightmost Digit
    hdu 2041 超级楼梯
    hdu 2012 素数判定
    hdu 1425 sort
    hdu 1071 The area
    hdu 1005 Number Sequence
    hdu 1021 Fibonacci Again
  • 原文地址:https://www.cnblogs.com/CaptainLin/p/14205438.html
Copyright © 2011-2022 走看看