JAVA中对登录进行IP限制

一、获取登录用户的网络IP

java 复制代码
public String getIpAddress(HttpServletRequest request) {
        String ipAddress = request.getHeader("x-forwarded-for");
        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getHeader("Proxy-Client-IP");
        }
        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
            ipAddress = request.getRemoteAddr();
        }
        return ipAddress;
    }

二、在用户表中可以设置ip字段(添加可访问的ip或者ip段)

三、限制IP访问

1.判断表中ip字段中是否存在0.0.0.0 如果存在的话说明允许所有ip访问

2.如果不存在0.0.0.0,则判断ip字段是否存在指定ip段 例如192.168.1.0/24 (如果有的话 则需要判断 当前用户ip是否属于该ip段)

3.如果用户ip不存在于ip段中,则判断ip字段中是否存在单个ip 例如 192.168.1.36

方法一

判断ip字段中是否存在0.0.0.0的方法

参数array数组为我们数据库中存的ip字段的数据 转成数组

target为0.0.0.0

java 复制代码
    private static boolean containsIPAddress(String[] array, String target) {
        for (String element : array) {
            if (element.startsWith(target)) {
                return true;
            }
        }
        return false;
    }

方法二

判断用户ip是否存在于ip段以及判断用户ip是否存在于ip字段中

java 复制代码
private static boolean isIPInArray(String targetIP, String[] ipArray) {
        for (String ipOrRange : ipArray) {
            if (isIPInRange(targetIP, ipOrRange)) {
                return true;
            }
        }
        return false;
    }

    private static boolean isIPInRange(String ipAddress, String ipOrRange) {
        try {
            InetAddress inetAddress = InetAddress.getByName(ipAddress);
            byte[] ipAddressBytes = inetAddress.getAddress();

            if (!ipOrRange.contains("/")) {
                InetAddress rangeInetAddress = InetAddress.getByName(ipOrRange);
                byte[] rangeIpAddressBytes = rangeInetAddress.getAddress();

                for (int i = 0; i < ipAddressBytes.length; i++) {
                    if (ipAddressBytes[i] != rangeIpAddressBytes[i]) {
                        return false;
                    }
                }
                return true;
            }

使用步骤

ipAddress为获取的登录用户的网络ip

java 复制代码
 String ipAddress = this.getIpAddress(request); 
 boolean b = containsIPAddress(split, "0.0.0.0");
 boolean ipInArray = isIPInArray(ipAddress, split);

点赞加关注,持续更新中!!!

如有疑问,可评论,可私信,看到会回复

相关推荐
代码不停1 小时前
自动化测试(java)
java·开发语言·selenium·自动化
北京盛世宏博2 小时前
通信异常深度排查:以太网温湿度设备 TCP 粘包、UDP 丢包根治方案
单片机·网络协议·tcp/ip·udp·以太网·传感器·温湿度
鬼手点金3 小时前
opencode-rules 插件
java·开发语言·前端·人工智能·chrome·git·github
paopaokaka_luck4 小时前
滑雪场管理系统(AI智能助手流式对话,ECharts 运营数据分析、教练、雪具与场地一体化预约,钱包支付退款、订单核销与服务评价)
java·人工智能·spring boot·网络协议·数据分析·echarts
SL_staff4 小时前
JVS混合架构实践:能力引擎+动态模型如何支撑企业级可持续交付
spring boot·低代码·全栈
迪飞特科技4 小时前
智慧物业平台实战:Spring Boot 整合小程序实现报修巡检费用全流程
spring boot·后端·小程序
考虑考虑4 小时前
@JsonInclude注解使用
spring boot·后端·spring
Wang's Blog4 小时前
Java 项目实战: 交友项目 - Dubbo 的内部结构与一次调用的完整链路
java·dubbo
Wang's Blog4 小时前
Java 项目实战: 交友项目 - Dubbo 入门引导
java·dubbo·交友
蜗牛互联网5 小时前
Python Agent工具调用的白名单、参数校验与审批门禁
java·服务器·前端·人工智能·后端·python