获取IP地址工具类

快来打我* 2022-05-12 04:00 436阅读 0赞

权限系统IP工具类

  1. @Slf4j
  2. public class IpUtil {
  3. public final static String ERROR_IP = "127.0.0.1";
  4. public final static Pattern pattern = Pattern.
  5. compile("(2[5][0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})\\.(25[0-5]|2[0-4]\\d|1\\d{2}|\\d{1,2})");
  6. /** * 取外网IP * * @param request * @return */
  7. public static String getRemoteIp(HttpServletRequest request) {
  8. String ip = request.getHeader("x-real-ip");
  9. if (ip == null) {
  10. ip = request.getRemoteAddr();
  11. }
  12. //过滤反向代理的ip
  13. String[] stemps = ip.split(",");
  14. if (stemps != null && stemps.length >= 1) {
  15. //得到第一个IP,即客户端真实IP
  16. ip = stemps[0];
  17. }
  18. ip = ip.trim();
  19. if (ip.length() > 23) {
  20. ip = ip.substring(0, 23);
  21. }
  22. return ip;
  23. }
  24. /** * 获取用户的真实ip * * @param request * @return */
  25. public static String getUserIP(HttpServletRequest request) {
  26. // 优先取X-Real-IP
  27. String ip = request.getHeader("X-Real-IP");
  28. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  29. ip = request.getHeader("x-forwarded-for");
  30. }
  31. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  32. ip = request.getRemoteAddr();
  33. if ("0:0:0:0:0:0:0:1".equals(ip)) {
  34. ip = ERROR_IP;
  35. }
  36. }
  37. if ("unknown".equalsIgnoreCase(ip)) {
  38. ip = ERROR_IP;
  39. return ip;
  40. }
  41. int pos = ip.indexOf(',');
  42. if (pos >= 0) {
  43. ip = ip.substring(0, pos);
  44. }
  45. return ip;
  46. }
  47. public static String getLastIpSegment(HttpServletRequest request) {
  48. String ip = getUserIP(request);
  49. if (ip != null) {
  50. ip = ip.substring(ip.lastIndexOf('.') + 1);
  51. } else {
  52. ip = "0";
  53. }
  54. return ip;
  55. }
  56. public static boolean isValidIP(HttpServletRequest request) {
  57. String ip = getUserIP(request);
  58. return isValidIP(ip);
  59. }
  60. /** * 判断我们获取的ip是否是一个符合规则ip * * @param ip * @return */
  61. public static boolean isValidIP(String ip) {
  62. if (StringUtils.isEmpty(ip)) {
  63. log.debug("ip is null. valid result is false");
  64. return false;
  65. }
  66. Matcher matcher = pattern.matcher(ip);
  67. boolean isValid = matcher.matches();
  68. log.debug("valid ip:" + ip + " result is: " + isValid);
  69. return isValid;
  70. }
  71. public static String getLastServerIpSegment() {
  72. String ip = getServerIP();
  73. if (ip != null) {
  74. ip = ip.substring(ip.lastIndexOf('.') + 1);
  75. } else {
  76. ip = "0";
  77. }
  78. return ip;
  79. }
  80. public static String getServerIP() {
  81. InetAddress inet;
  82. try {
  83. inet = InetAddress.getLocalHost();
  84. String hostAddress = inet.getHostAddress();
  85. return hostAddress;
  86. } catch (UnknownHostException e) {
  87. e.printStackTrace();
  88. }
  89. return "127.0.0.1";
  90. }
  91. }

使用

  1. user.setOperateIp(IpUtil.getRemoteIp(RequestHolder.getCurrentRequest()));

发表评论

表情:
评论列表 (有 0 条评论,436人围观)

还没有评论,来说两句吧...

相关阅读