1. guava-19.0.jar jar包自己下载,csdn有
2.web.xml
配置过滤器
<filter>
<filter-name>limiterFilter</filter-name>
<filter-class>你的包名.RateLimiterFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>limiterFilter</filter-name>
<url-pattern>你需要过滤的url</url-pattern>
</filter-mapping>
3.RateLimiterFilter.java 代码
package 你的包名;
import java.io.IOException;
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 com.google.common.util.concurrent.RateLimiter;
public class RateLimiterFilter implements Filter {
private RateLimiter limiter = null;
@Override
public void init(FilterConfig arg0) throws ServletException {
limiter = RateLimiter.create(100);
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
if(limiter.tryAcquire()) {
request.setAttribute("limiter", "ok");
chain.doFilter(request, response);
}
}
@Override
public void destroy() {
}
}
4.action
@Controller
@Scope(value = "prototype")
public class TestAction extends BaseAction implements ModelDriven<T>{
public void search() throws Exception{
Map<String, Object> resMap = new HashMap<String, Object>();
if(!"ok".equals(request.getAttribute("limiter"))){
resMap.put("status","error");
resMap.put("reason","访问人数太多,请稍后访问");
writeJSON(resMap);
return;
}
// 你的正常逻辑
}