| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package cn.com.goldenwater.dcproj.intercepter;
- import cn.com.goldenwater.dcproj.constValue.CommonLabel;
- import cn.com.goldenwater.dcproj.utils.ReturnUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.data.redis.core.RedisTemplate;
- import org.springframework.web.method.HandlerMethod;
- import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.util.concurrent.TimeUnit;
- /**
- * Created by jinshui on 2020/1/19.
- */
- public class PathInterceptor extends HandlerInterceptorAdapter {
- @Value("${intercept.enable}")
- public Boolean enterceptEnable;
- @Autowired
- private RedisTemplate redisTemplate;
- @Override
- public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- if (enterceptEnable) {
- String accessToken = request.getHeader(CommonLabel.ACCESS_TOKEN);
- if (StringUtils.isBlank(accessToken)) {
- return true;
- }
- String methodName = ((HandlerMethod)handler).getMethod().getName();
- if (StringUtils.isBlank(methodName)) {
- return true;
- }
- String key = accessToken + methodName;
- Object value = redisTemplate.opsForValue().get(key);
- if (value == null) {
- redisTemplate.opsForValue().set(key, 1, 60000, TimeUnit.MILLISECONDS);
- return true;
- }
- Integer intValue = Integer.valueOf(String.valueOf(value));
- if (intValue == null) {
- redisTemplate.opsForValue().set(key, 1, 60000, TimeUnit.MILLISECONDS);
- return true;
- }
- if (intValue.intValue() < 100) {
- redisTemplate.boundValueOps(key).increment(1);
- return true;
- }
- ReturnUtils.responseFail(response,"检测到该接口请求频繁,可能存在恶意操作,系统已将该IP地址暂时列入黑名单,如果疑问,请一分钟后再试!",9991);
- return false;
- }
- return true;
- }
- }
|