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") && false){ 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())); } }