1、前言
有时候我们需要在服务多记录请求用的的IP地址等相关信息,从而来做一些事情,比如:过滤、拦截等。
下边直接贴源码:
2、通过request获取ip地址
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-AuthenticationIp");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-AuthenticationIp");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
3、有时候我们需要根据用户输入的ip来验证合法性。
最近,我在做一个网关项目的时候,需要设置ip黑白名单,就需要设置Ip,从而需要验证Ip的合法性:
/**
* 验证IP是否合法
* @param ip
* @return
*/
public static boolean ipValidate(String ip) {
if (StringUtils.isEmpty(ip)) return false;
// 定义正则表达式
String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."
+ "(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";
// 判断ip地址是否与正则表达式匹配
return ip.matches(regex);
}
4、说明:
欢迎关注本人微信公众号:程序员刊(javamanual),每人分享Java技术干货、微服务、大数据、Python等等。
标微信公众号:程序员刊(javamanual)标题题