whyclj
2019-10-29 1c0469e45346d464e0c5672ee68f9ecd4fb6be7c
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
package com.fgkj.Filters;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import org.omg.CORBA.Request;
 
import com.fgkj.actions.ActionUtil;
import com.fgkj.dto.ServiceModel;
 
public class CrossDomainLimitFilter implements Filter{
    public static final int max_connect_count = 10;
    
    public final static String CROSS_DOMAIN_KEY    = "44c4a294cb66d13727c14b065dbe8548";        //跨域请求 key
        
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request=(HttpServletRequest)req;
        HttpServletResponse response =(HttpServletResponse)resp;
        String URL=request.getRequestURI();
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=utf-8");
        //检测跨域访问的请求
        if(URL != null && URL.endsWith("_ky")){
            String key = req.getParameter("key");                                        //获取校验码
            ServiceModel model = new ServiceModel();                                    
            boolean isAlowVisit = false;                                                //是否允许访问
            //System.out.println(key+"=="+CROSS_DOMAIN_KEY);
            if(key != null && CROSS_DOMAIN_KEY.equals(key)){
                isAlowCrossDomain(response);
                //System.out.println("开始休眠500毫秒秒");
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally{
                    //System.out.println("休眠结束.....");
                }
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                System.out.println("跨域访问域名或ip:"+request.getRemoteHost()+" At "+sdf.format(new Date()));
                
                isAlowVisit = true;
            }else{
                model.setMsg("校验码发送失败,key:"+key);
            }            
            if(isAlowVisit){
                //通过请求
                chain.doFilter(request, response);        //允许跨域
            }else{
                //不能放行的请求
                PrintWriter out = response.getWriter();
                out.write(ActionUtil.getGson().toJson(model));
                out.flush();
                out.close();
            }
        }else{
            //非跨域请求
            chain.doFilter(request, response);
            //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            //System.out.println("非跨域请求不允许放行"+request.getRemoteHost()+" At "+sdf.format(new Date()));
        }
        
    }
 
    public void init(FilterConfig arg0) throws ServletException {
        
    }
 
    public void destroy() {
        
    }
    
    /**
     * 允许跨域访问
     * @param response
     */
    public void isAlowCrossDomain(HttpServletResponse response){
        response.setHeader("Access-Control-Allow-Origin", "*");                //允许跨域访问
        response.setHeader("Access-Control-Allow-Headers", "X-Requested-With,content-type,token");
        response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH");
    }
    
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(sdf.format(new Date()));
    }
}