调用类:
在类的最上方添加读取配置文件的语句
private static final String IP = ConfigUtil.readValue(“ipConfig.properties”, “ip”);

          /*** String realIp = IPUtil.getIpAddr(request);* if(!"0:0:0:0:0:0:0:1".equals(realIp)){*     List<String> ipList = Resources.readLines(Resources.getResource("ipWhiteList.txt"),Charset.forName("utf-8"));*     if(!IPWhiteListUtil.checkIpList(realIp, ipList)){*         retMap.put("code", ILLEGAL_IP);*         retMap.put("msg", "非法IP,请联系管理员");*         return retMap;*     }*//*     String realIp = IPUtil.getIpAddr(request);if(!"0:0:0:0:0:0:0:1".equals(realIp)) {List<String> ipList = Resources.readLines(Resources.getResource("ipConfig.properties"), Charset.forName("utf-8"));if (!IPWhiteListUtil.checkIpList(realIp, ipList)){responseObj.put("code", "ILLEGAL_IP");responseObj.put("msg", "非法IP,请联系管理员");return responseObj.toString();}}*///添加一个参数传入HTTPServletRequest request/*   String realIp = IPUtil.getIpAddr(request);if(!"0:0:0:0:0:0:0:1".equals(realIp)) {
//                List<String> ipList = Resources.readLines(Resources.getResource("ipConfig.properties"), Charset.forName("utf-8"));if (!IPWhiteListUtil.checkIp(realIp, WHITE_LIST_IP)){obj.put("code", "ILLEGAL_IP");obj.put("msg", "非法IP,请联系管理员");return obj.toString();}}*/

工具类:

package com.propertypay.utils;import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;/*** @ClassName:IPWhiteList* @Function: IP 白名单.* @Reason:关于IP白名单相关.* @version*/
public class IPWhiteListUtil {// IP的正则private static Pattern pattern = Pattern.compile("(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})\\."+ "(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})\\."+ "(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})\\."+ "(1\\d{1,2}|2[0-4]\\d|25[0-5]|\\d{1,2})");/**** getAvaliIpList:(根据IP白名单设置获取可用的IP列表).** @date 2017-4-17 下午02:50:20* @return*/private static Set<String> getAvaliIpList(String allowIp) {Set<String> ipList = new HashSet<String>();for (String allow : allowIp.replaceAll("\\s", "").split(";")) {if (allow.indexOf("*") > -1) {String[] ips = allow.split("\\.");String[] from = new String[] { "0", "0", "0", "0" };String[] end = new String[] { "255", "255", "255", "255" };List<String> tem = new ArrayList<String>();for (int i = 0; i < ips.length; i++)if (ips[i].indexOf("*") > -1) {tem = complete(ips[i]);from[i] = null;end[i] = null;} else {from[i] = ips[i];end[i] = ips[i];}StringBuffer fromIP = new StringBuffer();StringBuffer endIP = new StringBuffer();for (int i = 0; i < 4; i++)if (from[i] != null) {fromIP.append(from[i]).append(".");endIP.append(end[i]).append(".");} else {fromIP.append("[*].");endIP.append("[*].");}fromIP.deleteCharAt(fromIP.length() - 1);endIP.deleteCharAt(endIP.length() - 1);for (String s : tem) {String ip = fromIP.toString().replace("[*]",s.split(";")[0])+ "-"+ endIP.toString().replace("[*]", s.split(";")[1]);if (validate(ip)) {ipList.add(ip);}}} else {if (validate(allow)) {ipList.add(allow);}}}return ipList;}private static Set<String> getAvaliIpList(Set<String> ipSet) {Set<String> ipList = new HashSet<String>();for (String allow : ipSet) {if (allow.indexOf("*") > -1) {String[] ips = allow.split("\\.");String[] from = new String[] { "0", "0", "0", "0" };String[] end = new String[] { "255", "255", "255", "255" };List<String> tem = new ArrayList<String>();for (int i = 0; i < ips.length; i++)if (ips[i].indexOf("*") > -1) {tem = complete(ips[i]);from[i] = null;end[i] = null;} else {from[i] = ips[i];end[i] = ips[i];}StringBuffer fromIP = new StringBuffer();StringBuffer endIP = new StringBuffer();for (int i = 0; i < 4; i++)if (from[i] != null) {fromIP.append(from[i]).append(".");endIP.append(end[i]).append(".");} else {fromIP.append("[*].");endIP.append("[*].");}fromIP.deleteCharAt(fromIP.length() - 1);endIP.deleteCharAt(endIP.length() - 1);for (String s : tem) {String ip = fromIP.toString().replace("[*]",s.split(";")[0])+ "-"+ endIP.toString().replace("[*]", s.split(";")[1]);if (validate(ip)) {ipList.add(ip);}}} else {if (validate(allow)) {ipList.add(allow);}}}return ipList;}/*** 对单个IP节点进行范围限定** @param arg* @return 返回限定后的IP范围,格式为List[10;19, 100;199]*/private static List<String> complete(String arg) {List<String> com = new ArrayList<String>();if (arg.length() == 1) {com.add("0;255");} else if (arg.length() == 2) {String s1 = complete(arg, 1);if (s1 != null)com.add(s1);String s2 = complete(arg, 2);if (s2 != null)com.add(s2);} else {String s1 = complete(arg, 1);if (s1 != null)com.add(s1);}return com;}private static String complete(String arg, int length) {String from = "";String end = "";if (length == 1) {from = arg.replace("*", "0");end = arg.replace("*", "9");} else {from = arg.replace("*", "00");end = arg.replace("*", "99");}if (Integer.valueOf(from) > 255)return null;if (Integer.valueOf(end) > 255)end = "255";return from + ";" + end;}/*** 在添加至白名单时进行格式校验** @param ip* @return*/private static boolean validate(String ip) {for (String s : ip.split("-"))if (!pattern.matcher(s).matches()) {return false;}return true;}/**** checkLoginIP:(根据IP,及可用Ip列表来判断ip是否包含在白名单之中).* @date 2017-4-17 下午03:01:03* @param ip* @param ipList* @return*/private static boolean checkLoginIP(String ip, Set<String> ipList) {if (ipList.contains(ip))return true;else {for (String allow : ipList) {if (allow.indexOf("-") > -1) {String[] from = allow.split("-")[0].split("\\.");String[] end = allow.split("-")[1].split("\\.");String[] tag = ip.split("\\.");// 对IP从左到右进行逐段匹配boolean check = true;for (int i = 0; i < 4; i++) {int s = Integer.valueOf(from[i]);int t = Integer.valueOf(tag[i]);int e = Integer.valueOf(end[i]);if (!(s <= t && t <= e)) {check = false;break;}}if (check) {return true;}}}}return false;}/**** checkLoginIP:(根据IP地址,及IP白名单设置规则判断IP是否包含在白名单).* @param ip* @param ipWhiteConfig* @return*/public static boolean checkLoginIP(String ip,String ipWhiteConfig){Set<String> ipList = getAvaliIpList(ipWhiteConfig);return checkLoginIP(ip, ipList);}/**** ip在ipList中,则返回true* @param ip* @param ipList* @return* @see*/public static boolean checkIpList(String ip, List<String> ipList) {Set<String> ipSet = new HashSet<String>();for (String ipStr : ipList) {if (!ipStr.trim().startsWith("#")) {ipSet.add(ipStr.trim());}}ipSet = getAvaliIpList(ipSet);return checkLoginIP(ip, ipSet);}/**** ip在ip中,则返回true* @param ip* @param ipStr* @return* @see*/public static boolean checkIp(String ip, String ipStr) {Set<String> ipSet = new HashSet<String>();if (!ipStr.trim().startsWith("#")) {ipSet.add(ipStr.trim());}ipSet = getAvaliIpList(ipSet);return checkLoginIP(ip, ipSet);}public static void main(String[] args) {String ipWhilte = "192.168.1.1;" +                 //设置单个IP的白名单"192.168.2.*;" +                 //设置ip通配符,对一个ip段进行匹配"192.168.3.17-192.168.3.38";     //设置一个IP范围boolean flag = checkLoginIP("192.168.2.2",ipWhilte);boolean flag2 = checkLoginIP("192.168.1.2",ipWhilte);boolean flag3 = checkLoginIP("192.168.3.16",ipWhilte);boolean flag4 = checkLoginIP("192.168.3.17",ipWhilte);System.out.println(flag);  //trueSystem.out.println(flag2);  //falseSystem.out.println(flag3);  //falseSystem.out.println(flag4);  //true}}

IPUtil 工具类:

import javax.servlet.http.HttpServletRequest;public class IPUtil {/** * 获取用户真实IP地址,不使用request.getRemoteAddr()的原因是有可能用户使用了代理软件方式避免真实IP地址, * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值 *  * @return ip*/public static String getIpAddr(HttpServletRequest request) {String ip = request.getHeader("x-forwarded-for"); if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {  // 多次反向代理后会有多个ip值,第一个ip才是真实ipif( ip.indexOf(",")!=-1 ){ip = ip.split(",")[0];}}  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.getHeader("X-Real-IP");  }  if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {  ip = request.getRemoteAddr();  } return ip;  }
}

Springboot添加白名单Ip相关推荐

  1. haproxy 客户端真实IP地址添加白名单

    haproxy 客户端真实IP地址添加白名单 haproxy 添加白名单的方法网上有了就不重复了: 我们的架构如下,haproxy 不是直接对外的,所以在haproxy添加ip地址白名单会限制所有交易 ...

  2. 怎么将服务器加入系统白名单,服务器怎么添加白名单

    服务器怎么添加白名单 内容精选 换一换 防护域名开启WEB基础防护之后,访问网站如果出现500,502,504等报错,并且显示Web应用防火墙和网站连接失败,如图1所示.可能的原因比较多,如防火墙拦截 ...

  3. 网站通过nginx设置黑/白名单IP限制、国家城市IP访问限制

    一.黑/白名单IP限制访问配置 nginx配置黑白名单有好几种方式,这里只介绍常用的两种方法. 1.第一种方法:allow.deny deny和allow指令属于ngx_http_access_mod ...

  4. HTTP代理如何添加白名单?

    1.接口描述 接口地址:https://proxy.qg.net/whitelist/add 本接口用于添加IP的白名单. 该接口单个Key的请求频率限制为:20次/分钟: 方法:HTTP.GET,需 ...

  5. 企业微信 添加白名单_企业微信群为什么只能加200人?企业微信群怎么申请扩容?...

    使用企业微信的过程中,很多人都会接触到这样一个说法,那就是企业微信群人数上限是200人,但这个说法是不太准确的.下面我们就来看看具体是怎样的吧!1 企业微信群人数上限是多少 企业微信群分为内部群与外部 ...

  6. 微信白名单服务器ip地址,微信服务器白名单IP列表

    微信服务器白名单IP列表,列出以便自己做白名单使用. [0] => 101.226.62.77 [1] => 101.226.62.78 [2] => 101.226.62.79 [ ...

  7. eas-dep添加白名单

    打开需要添加白名单的业务单据的编辑界面 1做完之后,不要在该客户端上做任何操作,打开客户端安装目录eas\client\logs\log4j.log,拉到最后一行.找到EDITUI结尾的UI.例如下: ...

  8. 【公众号技能+】添加白名单,允许其他公众号转载文章

    1.登录微信公众号 2.在首页左侧的菜单栏中点击原创管理 3.点击全局可转载账号 4.点击全局可转载账号页面中的添加 5.在搜索框输入需要添加为白名单的公众号名称 6.点击搜索框下的公众号 7.设置白 ...

  9. Android 5.1.1源码修改添加白名单和静默安装功能

    最近弄项目都是些要改源码才能实现的,像静默安装和白名单功能. 静默安装: 1:在源码的AndroidMainfest.xml中添加权限 --- a/frameworks/base/core/res/A ...

最新文章

  1. [导入]商业智能2.0?(BI 2.0 from Timo Elliott)
  2. 关于cp命令中拷贝所有的写法
  3. 水晶报表-简单数据类型(Crystal 语法)
  4. 网友用筋膜枪提升手速抢茅台,平台回应不可靠,用了你也抢不到!
  5. 排序算法系列之归并排序
  6. IS技术:稳定压倒一切
  7. UI组件DevExpress WinForm入门指南 - DialogService服务
  8. 水经注影像离线包简介
  9. 100ask imx6ull开发板移植NXP官方UBOOT
  10. 基于分类分级的医疗临床数据合规共享与安全防护建设实践
  11. BLE蓝牙应用生成Android/iOS APP以及小程序
  12. 针对Sql Server中进行查询操作时提示“对象名无效”
  13. Facebook币Libra学习-6.发行属于自己的代币Token案例(含源码)
  14. Python采集《雪中》弹幕做词云图可视化分析,看看它为何高开低走
  15. 关于lock_guard
  16. 【手把手教安装】VM16 Pro安装Win10!!!
  17. 白苹果如何制作自己的OS X 10.9“巨浪”可引导系统安装盘?
  18. matlab中的A(:)
  19. STM32连YL69土壤湿度传感器以及内部温度传感器采集数据并在LCD上显示
  20. .Net 依赖Office将Word转Pdf的实现

热门文章

  1. 智慧城市App解决方案
  2. 利用JavaScript生成动态添加歌单
  3. 深入浅出 Greasemonkey
  4. 用Python做个美少女大战小怪兽
  5. 视频教程-Jira敏捷项目管理(1)-Linux
  6. KTorrent 2.2 公布
  7. 摩托罗拉ap6521恢复出厂_moto AP6521 配置命令
  8. 员工成长的能力与技能是企业的资产还是负债?这个问题怎么解决?
  9. Spice Model 解读
  10. 当今计算机科学发展趋势,探索计算机科学与技术的发展趋势