IpUtil.java 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package com.dk.oauth.util;
  2. import org.apache.commons.lang3.StringUtils;
  3. import javax.servlet.http.HttpServletRequest;
  4. import java.util.regex.Matcher;
  5. import java.util.regex.Pattern;
  6. public class IpUtil {
  7. private static String pattern = "^Mozilla/\\d\\.\\d\\s+\\(+.+?\\)";
  8. private static String pattern2 = "\\(+.+?\\)";
  9. private static Pattern r = Pattern.compile(pattern);
  10. private static Pattern r2 = Pattern.compile(pattern2);
  11. /**
  12. * 获取登录用户的IP地址
  13. *
  14. * @param request
  15. * @return
  16. */
  17. public static String getIpAddr(HttpServletRequest request) {
  18. // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
  19. String ip = request.getHeader("X-Forwarded-For");
  20. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  21. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  22. ip = request.getHeader("Proxy-Client-IP");
  23. }
  24. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  25. ip = request.getHeader("WL-Proxy-Client-IP");
  26. }
  27. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  28. ip = request.getHeader("HTTP_CLIENT_IP");
  29. }
  30. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  31. ip = request.getHeader("HTTP_X_FORWARDED_FOR");
  32. }
  33. if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
  34. ip = request.getRemoteAddr();
  35. }
  36. } else if (ip.length() > 15) {
  37. String[] ips = ip.split(",");
  38. for (int index = 0; index < ips.length; index++) {
  39. String strIp = (String) ips[index];
  40. if (!("unknown".equalsIgnoreCase(strIp))) {
  41. ip = strIp;
  42. break;
  43. }
  44. }
  45. }
  46. return ip;
  47. }
  48. /**
  49. * 获取浏览器信息
  50. *
  51. * @param userAgent
  52. * @return
  53. */
  54. public static String getBrowser(String userAgent) {
  55. String browser = "";
  56. String version = "";
  57. Integer startLen = 0;
  58. Integer endLen = 0;
  59. if (userAgent.toLowerCase().indexOf("msie") != -1) {
  60. browser = "IE";
  61. startLen = userAgent.toLowerCase().indexOf("msie");
  62. endLen = userAgent.indexOf(";", startLen);
  63. version = userAgent.substring(startLen + 5, endLen);
  64. } else if (userAgent.toLowerCase().indexOf("trident/7") != -1) {
  65. browser = "IE";
  66. startLen = userAgent.toLowerCase().indexOf("rv:") + 3;
  67. endLen = userAgent.indexOf(")", startLen);
  68. version = userAgent.substring(startLen, endLen);
  69. } else if (userAgent.toLowerCase().indexOf("chrome") != -1) {
  70. browser = "CHROME";
  71. startLen = userAgent.toLowerCase().indexOf("chrome") + 7;
  72. endLen = userAgent.indexOf(" ", startLen);
  73. version = userAgent.substring(startLen, endLen);
  74. } else if (userAgent.toLowerCase().indexOf("firefox") != -1) {
  75. browser = "FIREFOX";
  76. startLen = userAgent.toLowerCase().indexOf("firefox") + 8;
  77. endLen = userAgent.length();
  78. version = userAgent.substring(startLen, endLen);
  79. } else if (userAgent.toLowerCase().indexOf("safari") != -1) {
  80. browser = "SAFARI";
  81. startLen = userAgent.toLowerCase().indexOf("version") + 8;
  82. endLen = userAgent.indexOf(" ", startLen);
  83. version = userAgent.substring(startLen, endLen);
  84. } else if (userAgent.toLowerCase().indexOf("opera") != -1) {
  85. browser = "OPERA";
  86. startLen = userAgent.toLowerCase().indexOf("opera") + 6;
  87. endLen = userAgent.length();
  88. version = userAgent.substring(startLen, endLen);
  89. } else {
  90. browser = "OTHER";
  91. }
  92. return browser + "_" + version;
  93. }
  94. /**
  95. * 获得操作系统信息
  96. *
  97. * @return
  98. */
  99. public static String getDeviceInfo(HttpServletRequest request) {
  100. String userAgent = request.getHeader("User-Agent");
  101. return getDeviceInfo(userAgent);
  102. }
  103. private static String getDeviceInfo(String userAgent) {
  104. Matcher m = r.matcher(userAgent);
  105. String result = null;
  106. if (m.find()) {
  107. result = m.group(0);
  108. }
  109. Matcher m2 = r2.matcher(result);
  110. if (m2.find()) {
  111. result = m2.group(0);
  112. }
  113. result = result.replace("(", "");
  114. result = result.replace(")", "");
  115. return filterDeviceInfo(result);
  116. }
  117. public static String filterDeviceInfo(String result) {
  118. if (StringUtils.isEmpty(result)) {
  119. return null;
  120. }
  121. result = result.replace(" U;", "");
  122. result = result.replace(" zh-cn;", "");
  123. return result;
  124. }
  125. }