Browse Source

科德系统新增同接口1秒访问的限制

anderx 7 months ago
parent
commit
f05fa4c313

+ 21 - 0
src/main/java/com/goafanti/core/shiro/filter/AdminFilter.java

@@ -5,6 +5,7 @@ import com.goafanti.common.bo.Result;
 import com.goafanti.common.model.Admin;
 import com.goafanti.common.model.AftUser;
 import com.goafanti.common.utils.LoggerUtils;
+import com.goafanti.common.utils.RedisUtil;
 import com.goafanti.core.shiro.token.TokenManager;
 import org.apache.shiro.web.filter.AccessControlFilter;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,12 +20,32 @@ public class AdminFilter extends AccessControlFilter {
 
 	@Autowired
 	private ShiroFilterUtils		shiroFilterUtils;
+	@Autowired
+	private RedisUtil redisUtil;
 
 	@Override
 	protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue)
 			throws Exception {
 		AftUser token = TokenManager.getToken();
 		if (token instanceof Admin) {
+			//获取接口名称
+			String UrlName = ((HttpServletRequest) request).getRequestURI();
+			//获取访问是post还是get
+			boolean post = ((HttpServletRequest) request).getMethod().equals("POST");
+
+			String tokenTime = redisUtil.getString("tokenTime");
+			if (tokenTime != null){
+				//只限制post请求
+				if(post){
+					//判定接口相同时间小于1秒提示请勿重复提交
+					if (UrlName.equals(tokenTime.split("\\|")[0])){
+						if (System.currentTimeMillis()-Long.valueOf(tokenTime.split("\\|")[1])<1000){
+							shiroFilterUtils.out((HttpServletResponse) response, new Result().error(new Error("请勿重复提交!")));
+						}
+					}
+				}
+			}
+			redisUtil.setString("tokenTime",UrlName+"|"+System.currentTimeMillis());
 			return Boolean.TRUE;
 		}
 		return Boolean.FALSE;

+ 8 - 8
src/main/java/com/goafanti/core/shiro/filter/LoginFilter.java

@@ -1,17 +1,16 @@
 package com.goafanti.core.shiro.filter;
 
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.shiro.web.filter.AccessControlFilter;
-import org.springframework.beans.factory.annotation.Autowired;
-
 import com.goafanti.common.bo.Error;
 import com.goafanti.common.bo.Result;
 import com.goafanti.common.utils.LoggerUtils;
 import com.goafanti.core.shiro.token.TokenManager;
+import org.apache.shiro.web.filter.AccessControlFilter;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 public class LoginFilter extends AccessControlFilter {
 	final static Class<LoginFilter>	CLASS	= LoginFilter.class;
@@ -19,6 +18,7 @@ public class LoginFilter extends AccessControlFilter {
 	@Autowired
 	private ShiroFilterUtils		shiroFilterUtils;
 
+
 	@Override
 	protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue)
 			throws Exception {