Java校验IP登录次数


	//多少时间内的访问次数
	private static final int LIMIT_ADDRESS_INTERVAL = 1000 * 60;
    //访问次数
    private static final int LIMIT_ADDRESS_NUMBER = 400;
    //限制时间
    private static final int LIMIT_ADDRESS_RESTRICTIONS = 1000 * 60 * 60;

	private String test(ServerHttpRequest request) {
		// 校验IP登录次数
  		String address = ClientIPUtil.getClientIP(request);
        if(!identifyingAddress(address)){
            return ResponseUtil.sendError(response, "访问次数太频繁,请1小时后再试");
        }
    }
    
	private Boolean identifyingAddress(String address) {
        //记录次数
        String key = address +":identifying";
        //锁定时间
        String restrictions = address +":restrictions";
        //如果用户已被锁定,直接返回false
        if(this.redisUtils.getValue(restrictions)!=null){
            return false;
        }
        //如果用户是初次访问,保存到redis中
        if(this.redisUtils.getValue(key)==null){
            this.redisUtils.setValue(key,1,LIMIT_ADDRESS_INTERVAL);
        }else{
        	//获取访问次数
            int num = (int)this.redisUtils.getValue(key);
            if(num >= LIMIT_ADDRESS_NUMBER){
                //访问次数达到设置的最高上限,锁定用户,返回false
                this.redisUtils.setValue(restrictions,address,LIMIT_ADDRESS_RESTRICTIONS);
                return false;
            }else{
            	//访问次数+1
                this.redisUtils.setValue(key,num + 1,redisUtils.getExpire(key));
            }
        }
        return true;
    }
//获取客户端IP
public class ClientIPUtil {

    public static String getClientIP(ServerHttpRequest request) {
        String ip = "";
        List<String> list = request.getHeaders().get("x-forwarded-for");
        if(list != null && list.size() > 0){
            ip = list.get(0);
        }
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
            List<String> list1 = request.getHeaders().get("Proxy-Client-IP");
            if(list1 != null && list1.size() > 0){
                ip = list1.get(0);
            }
        }
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
            List<String> list1 = request.getHeaders().get("WL-Proxy-Client-IP");
            if(list1 != null && list1.size() > 0){
                ip = list1.get(0);
            }
        }
        if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)){
            InetSocketAddress remoteAddress = request.getRemoteAddress();
            ip = remoteAddress.getAddress().getHostAddress();
        }

        return ip;
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值