- 防止重复提交 标记注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NoRepeatSubmit {
}
- 防止重复提交 切面类
package com.ciip.cloud.core.usercenter.aspect;
import cn.hutool.core.lang.Console;
import com.ciip.cloud.core.common.annotation.NoRepeatSubmit;
import com.ciip.cloud.core.common.util.RedisUtil;
import com.ciip.cloud.core.common.vo.ResultUtil;
import com.ciip.cloud.core.common.vo.usercenter.UserCenterStatusCode;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
@Aspect
@Component
public class NoRepeatSubmitAop {
@Autowired
private RedisUtil redisUtil;
@Around("execution(public * com.ciip.cloud.core.usercenter.controller..*.*(..)) && @annotation(nrs)")
public Object arround(ProceedingJoinPoint pjp, NoRepeatSubmit nrs) {
try {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
String sessionId = RequestContextHolder.getRequestAttributes().getSessionId();
HttpServletRequest request = attributes.getRequest();
String key ="-" + request.getServletPath();
if (redisUtil.get(sessionId,key) == null) {
redisUtil.setWithExpireTime(sessionId,key,"0",2);
Console.log("请求=========" + sessionId + key);
Object o = pjp.proceed();
return o;
} else {
Console.log("重复请求=========" + sessionId + key);
return ResultUtil.error(UserCenterStatusCode.REPEAT_SUBMIT.getCode(),UserCenterStatusCode.REPEAT_SUBMIT.getMsg());
}
} catch (Throwable e) {
e.printStackTrace();
return ResultUtil.error(UserCenterStatusCode.VERIFY_REPEAT_SUBMIT_EXCEPTION.getCode(),UserCenterStatusCode.VERIFY_REPEAT_SUBMIT_EXCEPTION.getMsg(),e);
}
}
}
- 实例:在Controller层上加上注解@NoRepeatSubmit,即可
@NoRepeatSubmit
@ApiOperation(value="/againJoinCooperationRecord", notes = "重新加入")
@PostMapping(value = CIIPCommonConstant.ApiAuth.ANON + "/againJoinCooperationRecord")
public ResponseMessage againJoinCooperationRecord(@RequestParam(value = "id") Long id,
@RequestParam(value = "examineStatus")String examineStatus,
@RequestParam(value = "rejectRejection") String rejectRejection){
return cooperationRecordService.againJoinCooperationRecord(id, examineStatus, rejectRejection);
}