微服务下redis对IP进行拦截
从request中获取IP
private boolean getIpAddress(HttpServletRequest request){
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
//判断是否存在ip
if (redisCache.hasKey(ip)){
Integer value = redisCache.getCacheObject(ip);
if (value<=IpInterceptConstants.MAX_IP){
redisCache.increment(ip,1);
}else {
log.info("启动拦截{}操作",ip);
return false;
}
}else {
redisCache.setCacheObject(ip,1,IpInterceptConstants.FAILURE_TIME, TimeUnit.MINUTES);
log.info("{}创建",ip);
}
return true;
}