参考地址:https://www.cnblogs.com/shinubi/p/6723003.html
开发过程中,当给第三方提供接口的时候,总会涉及到对ip鉴权,防止其他用户非法访问。而要完成以上功能,需要做到三步:
1. 获取客户端真实ip
2. 设置访问白名单
3. 过滤非法ip
获取客户端真实IP,已在上一篇做了介绍,这里不在赘述,以下主要介绍后两步。
获取白名单
以下白名单工具类支持单个ip、包含一个通配符“*” 和IP范围设置
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;
/**
* @ClassName:IPWhiteUtil
* @Function: IP 白名单.
* @Reason:关于IP白名单相关.
* @Date: 2018-5-8
* @version
*/
public class IPWhiteUtil {
// 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 2018-5-8
* @param ipConfig
* @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;