1
13693261870
2022-09-16 fee60c3e25fac0982f3b8cb8feea7225c4ed22f8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package com.terra.proxy.intercepter;
 
import cn.hutool.core.collection.CollectionUtil;
import com.terra.proxy.bean.BlackRule;
import com.terra.proxy.bean.VistorBean;
import com.terra.proxy.mapper.LogMapper;
import com.terra.proxy.mapper.ServiceMapper;
import com.terra.proxy.service.LogService;
import com.terra.proxy.service.ServerRegisterService;
import com.terra.proxy.util.JedisUtils;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.protocol.HttpContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import redis.clients.jedis.Jedis;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
 
public class ServletInterceptor  implements HandlerInterceptor {
 
    @Autowired
    private LogMapper logMapper;
    @Autowired
    private ServiceMapper serviceMapper;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if (request != null) {
            //获取访问IP
            String remoteAddr = request.getRemoteAddr();
            HashMap<String, Object> param = new HashMap<>();
            param.put("status","1");
            param.put("limit",5);
            param.put("page", 0);
            param.put("ip",remoteAddr);
            List<VistorBean> vistorBeans = logMapper.queryBlackLists(param);
            if(CollectionUtil.isNotEmpty(vistorBeans)) return false;
            //先判断redis中是否存在 不存在则加入reids中计数,存在则判断是否超出限制,若无则计数+1,若超出则加入黑名单
            Jedis jedis = JedisUtils.getJedis();
            String visitCountStr = jedis.get(remoteAddr);
            BlackRule blackRule = logMapper.selectBlackRule();
            if(blackRule==null) return false;
            if (StringUtils.isEmpty(visitCountStr)) {
                //不存在则加入redis中
                if(blackRule.getSeltime().equals("m")){
                    blackRule.setTime(blackRule.getTime()*60);
                }else if(blackRule.getSeltime().equals("h")){
                    blackRule.setTime(blackRule.getTime()*3600);
                }
                jedis.setex(remoteAddr, blackRule.getTime(), "1");
            } else {
                //已经存在 判断是否大于1000次 是则加入黑名单 否计数+1
                Integer visitCount = Integer.valueOf(visitCountStr);
                if (visitCount >= blackRule.getCount()) {
                    //加入黑名单 表visitlog中status状态为1:黑名单状态
                    VistorBean vb = new VistorBean();
                    Map<String, Object> params = new HashMap();
                    String zyid="0000";
                    String [] splitpath=null;
                    List<Map> serverlist = new ArrayList<>();
                    vb.setRequestip(request.getRemoteAddr());
                    String path = request.getPathInfo();
                    if(StringUtils.isNotEmpty(path)){
                        splitpath = path.split("/");
                        if(null!=splitpath && splitpath.length>1)zyid = splitpath[1];
                    }
 
                    String suffix = null;
                    vb.setResourceid(Integer.valueOf(zyid));
                    vb.setVisitfromsys("HYJGPT");
                    if (null!=splitpath&&splitpath.length > 3 && splitpath[3] != null) {
                        suffix = isdigit(splitpath[2]) ? splitpath[2] : null;
                    }
                    params.put("resourceid", Integer.valueOf(zyid));
                    params.put("suffix", suffix != null ? Integer.valueOf(suffix) : null);
                    params.put("enable", 1);
                    params.put("fromsys", "HYJGPT");
                    params.put("SERVERURL", "test");
                    serverlist = serviceMapper.queryServer(params);
                    if(CollectionUtil.isNotEmpty(serverlist)){
                        params.put("SERVERURL", serverlist.get(0).get("SERVERURL").toString());
                        serverlist.add(param);
                        vb.setServerurl(serverlist.get(0).get("SERVERURL").toString());
                    }
                    vb.setResult("false");
                    logMapper.saveBlackLog(vb);
                    return false;
                } else {
                    jedis.setrange(remoteAddr, 0, String.valueOf(visitCount + 1));
                }
 
            }
 
        }
 
        return true;
    }
 
    public static boolean isdigit(String str) {
 
        return str.matches("[0-9]+");
    }
 
 
 
}