4 changed files with 117 additions and 1 deletions
-
25src/main/java/com/gaotao/common/annotation/RepeatSubmit.java
-
76src/main/java/com/gaotao/common/aop/RepeatSubmitAspect.java
-
3src/main/java/com/gaotao/modules/schedule/controller/ScheduleController.java
-
14src/main/java/com/gaotao/modules/schedule/service/impl/ScheduleServiceImpl.java
@ -0,0 +1,25 @@ |
|||
package com.gaotao.common.annotation; |
|||
|
|||
import java.lang.annotation.Documented; |
|||
import java.lang.annotation.ElementType; |
|||
import java.lang.annotation.Inherited; |
|||
import java.lang.annotation.Retention; |
|||
import java.lang.annotation.RetentionPolicy; |
|||
import java.lang.annotation.Target; |
|||
|
|||
/** |
|||
* @ClassName: RepeatSubmit |
|||
* @Description: 自定义重复提交的注解 |
|||
* @author LR |
|||
* @date 2020年4月16日 |
|||
* @version V1.0 |
|||
*/ |
|||
@Target(value = {ElementType.METHOD}) |
|||
@Retention(value = RetentionPolicy.RUNTIME) |
|||
@Inherited |
|||
@Documented |
|||
public @interface RepeatSubmit { |
|||
|
|||
} |
|||
|
|||
|
|||
@ -0,0 +1,76 @@ |
|||
package com.gaotao.common.aop; |
|||
|
|||
import java.util.concurrent.TimeUnit; |
|||
|
|||
import javax.servlet.http.HttpServletRequest; |
|||
import javax.servlet.http.HttpServletResponse; |
|||
|
|||
import com.gaotao.modules.sys.entity.SysUserEntity; |
|||
import org.apache.commons.lang3.StringUtils; |
|||
import org.apache.shiro.SecurityUtils; |
|||
import org.aspectj.lang.ProceedingJoinPoint; |
|||
import org.aspectj.lang.annotation.Around; |
|||
import org.aspectj.lang.annotation.Aspect; |
|||
import org.aspectj.lang.annotation.Pointcut; |
|||
import org.springframework.stereotype.Component; |
|||
import org.springframework.web.context.request.RequestContextHolder; |
|||
import org.springframework.web.context.request.ServletRequestAttributes; |
|||
|
|||
import com.google.common.cache.Cache; |
|||
import com.google.common.cache.CacheBuilder; |
|||
|
|||
/** |
|||
* @ClassName: RepeatSubmitAspect |
|||
* @Description: 自定义注释切点 |
|||
* @author LR |
|||
* @date 2020年4月17日 |
|||
* @version V1.0 |
|||
*/ |
|||
@Component |
|||
@Aspect |
|||
public class RepeatSubmitAspect { |
|||
|
|||
//缓存数据存放 |
|||
private static final Cache<String, Object> caches = CacheBuilder.newBuilder() |
|||
.maximumSize(10000).expireAfterWrite(5, TimeUnit.SECONDS).build(); |
|||
|
|||
//切点 |
|||
@Pointcut("@annotation(com.gaotao.common.annotation.RepeatSubmit)") |
|||
public void pointCut() {} |
|||
|
|||
//处理业务逻辑 |
|||
@Around("pointCut()") |
|||
public Object submitAop(ProceedingJoinPoint pjp) throws Exception { |
|||
//获取request |
|||
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); |
|||
HttpServletRequest request = attributes.getRequest(); |
|||
String url = request.getRequestURI(); |
|||
SysUserEntity currentUser = (SysUserEntity) SecurityUtils.getSubject().getPrincipal(); |
|||
//判断是否是否null |
|||
if(null == currentUser) { |
|||
HttpServletResponse response = attributes.getResponse(); |
|||
response.sendError(HttpServletResponse.SC_FORBIDDEN, "Session is expired!"); |
|||
return response; |
|||
} |
|||
String username = currentUser.getUsername(); |
|||
//根据用户id+url作为唯一识别的请求 |
|||
String key = username + "-" + url; |
|||
//空值校验 |
|||
if(!StringUtils.isEmpty(key)) { |
|||
//判断是否患有当前的key |
|||
if(caches.getIfPresent(key) == null) { |
|||
caches.put(key, key); |
|||
}else { |
|||
HttpServletResponse response = attributes.getResponse(); |
|||
response.sendError(500, "重复提交!"); |
|||
return response; |
|||
} |
|||
} |
|||
//通过检验继续操作 |
|||
try { |
|||
return pjp.proceed(); |
|||
} catch (Throwable e) { |
|||
throw new RuntimeException(e.getMessage()); |
|||
} |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue