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);

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

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

相关推荐
咩咩啃树皮3 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚4 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
大模型码小白5 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司6 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地7 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun3141597 小时前
TCP超时重传机制是为了解决什么问题?
java
莫逸风10 小时前
【AgentScope 2.0】 0. 学习指南
java·llm·agent·agentscope
隔窗听雨眠10 小时前
Spring Boot在云原生时代的编程范式革新研究
spring boot·后端·云原生
z1234567898610 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
yaoxin52112311 小时前
470. Java 反射 - Member 接口与 AccessFlag
java·开发语言·python