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()));
|
}
|
}
|