1 package org.javabb.interceptor; 2 3 import java.util.Map ; 4 5 import org.apache.commons.logging.Log; 6 import org.apache.commons.logging.LogFactory; 7 import org.javabb.infra.ConfigurationFactory; 8 9 import com.opensymphony.webwork.ServletActionContext; 10 import com.opensymphony.xwork.ActionContext; 11 import com.opensymphony.xwork.ActionInvocation; 12 import com.opensymphony.xwork.interceptor.AroundInterceptor; 13 14 29 30 35 public class DelayInterceptor extends AroundInterceptor { 36 37 protected final Log _log = LogFactory.getLog(this.getClass()); 38 private boolean _isFlood = false; 39 40 41 46 protected void before(ActionInvocation invocation) throws Exception { 47 Map session = ActionContext.getContext().getSession(); 48 49 boolean createDelay = false; 50 Long userLastVisit = (Long ) session.get("user_last_visit"); 51 if (session.get("user_last_visit") == null) { 52 userLastVisit = new Long (System.currentTimeMillis()); 53 session.put("user_last_visit", userLastVisit); 54 } else { 55 createDelay = true; 56 } 57 58 String userIP = (String ) session.get("user_ip"); 59 if (userIP == null) { 60 userIP = ServletActionContext.getRequest().getRemoteAddr(); 61 session.put("user_ip", userIP); 62 } 63 64 if (userIP.equals(ServletActionContext.getRequest().getRemoteAddr())) { 65 long currTime = System.currentTimeMillis(); 66 long timeDiff = currTime - userLastVisit.longValue(); 67 if (createDelay && (timeDiff < 1500)) { 68 _log.debug("LAST FLOOD: |" + userLastVisit.longValue()); 69 _log.debug("IP FLOODING: |" 70 + ServletActionContext.getRequest().getRemoteAddr()); 71 _isFlood = true; 72 } 73 } 74 session.put("user_last_visit", new Long (System.currentTimeMillis())); 76 } 77 78 85 protected void after(ActionInvocation invocation, String result) 86 throws Exception { 87 } 89 90 93 public String intercept(ActionInvocation invocation) throws Exception { 94 before(invocation); 95 if (_isFlood && !"0".equals(ConfigurationFactory.getConf().floodControl)) { 96 _isFlood = false; 97 return "flood_control"; 98 } 99 return invocation.invoke(); 100 } 101 }
| Popular Tags
|