| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- /*
- * Copyright 2019-2020 Zheng Jie
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- package me.zhengjie.utils;
- import cn.hutool.http.HttpUtil;
- import cn.hutool.json.JSONObject;
- import cn.hutool.json.JSONUtil;
- import lombok.extern.slf4j.Slf4j;
- import me.zhengjie.config.ElAdminProperties;
- import net.dreamlu.mica.ip2region.core.Ip2regionSearcher;
- import net.dreamlu.mica.ip2region.core.IpInfo;
- import nl.basjes.parse.useragent.UserAgent;
- import nl.basjes.parse.useragent.UserAgentAnalyzer;
- import javax.servlet.http.HttpServletRequest;
- import java.net.InetAddress;
- import java.net.NetworkInterface;
- import java.net.UnknownHostException;
- import java.util.Calendar;
- import java.util.Date;
- import java.util.Enumeration;
- /**
- * @author Zheng Jie
- * 字符串工具类, 继承org.apache.commons.lang3.StringUtils类
- */
- @Slf4j
- public class StringUtils extends org.apache.commons.lang3.StringUtils {
- private static final char SEPARATOR = '_';
- private static final String UNKNOWN = "unknown";
- /**
- * 注入bean
- */
- private final static Ip2regionSearcher IP_SEARCHER = SpringContextHolder.getBean(Ip2regionSearcher.class);
- private static final UserAgentAnalyzer USER_AGENT_ANALYZER = UserAgentAnalyzer
- .newBuilder()
- .hideMatcherLoadStats()
- .withCache(10000)
- .withField(UserAgent.AGENT_NAME_VERSION)
- .build();
- /**
- * 驼峰命名法工具
- *
- * @return toCamelCase(" hello_world ") == "helloWorld"
- * toCapitalizeCamelCase("hello_world") == "HelloWorld"
- * toUnderScoreCase("helloWorld") = "hello_world"
- */
- public static String toCamelCase(String s) {
- if (s == null) {
- return null;
- }
- s = s.toLowerCase();
- StringBuilder sb = new StringBuilder(s.length());
- boolean upperCase = false;
- for (int i = 0; i < s.length(); i++) {
- char c = s.charAt(i);
- if (c == SEPARATOR) {
- upperCase = true;
- } else if (upperCase) {
- sb.append(Character.toUpperCase(c));
- upperCase = false;
- } else {
- sb.append(c);
- }
- }
- return sb.toString();
- }
- /**
- * 驼峰命名法工具
- *
- * @return toCamelCase(" hello_world ") == "helloWorld"
- * toCapitalizeCamelCase("hello_world") == "HelloWorld"
- * toUnderScoreCase("helloWorld") = "hello_world"
- */
- public static String toCapitalizeCamelCase(String s) {
- if (s == null) {
- return null;
- }
- s = toCamelCase(s);
- return s.substring(0, 1).toUpperCase() + s.substring(1);
- }
- /**
- * 驼峰命名法工具
- *
- * @return toCamelCase(" hello_world ") == "helloWorld"
- * toCapitalizeCamelCase("hello_world") == "HelloWorld"
- * toUnderScoreCase("helloWorld") = "hello_world"
- */
- static String toUnderScoreCase(String s) {
- if (s == null) {
- return null;
- }
- StringBuilder sb = new StringBuilder();
- boolean upperCase = false;
- for (int i = 0; i < s.length(); i++) {
- char c = s.charAt(i);
- boolean nextUpperCase = true;
- if (i < (s.length() - 1)) {
- nextUpperCase = Character.isUpperCase(s.charAt(i + 1));
- }
- if ((i > 0) && Character.isUpperCase(c)) {
- if (!upperCase || !nextUpperCase) {
- sb.append(SEPARATOR);
- }
- upperCase = true;
- } else {
- upperCase = false;
- }
- sb.append(Character.toLowerCase(c));
- }
- return sb.toString();
- }
- /**
- * 获取ip地址
- */
- public static String getIp(HttpServletRequest request) {
- String ip = request.getHeader("x-forwarded-for");
- 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.getRemoteAddr();
- }
- String comma = ",";
- String localhost = "127.0.0.1";
- if (ip.contains(comma)) {
- ip = ip.split(",")[0];
- }
- if (localhost.equals(ip)) {
- // 获取本机真正的ip地址
- try {
- ip = InetAddress.getLocalHost().getHostAddress();
- } catch (UnknownHostException e) {
- log.error(e.getMessage(), e);
- }
- }
- return ip;
- }
- /**
- * 根据ip获取详细地址
- */
- public static String getCityInfo(String ip) {
- if (ElAdminProperties.ipLocal) {
- return getLocalCityInfo(ip);
- } else {
- return getHttpCityInfo(ip);
- }
- }
- /**
- * 根据ip获取详细地址
- */
- public static String getHttpCityInfo(String ip) {
- String api = String.format(ElAdminConstant.Url.IP_URL, ip);
- JSONObject object = JSONUtil.parseObj(HttpUtil.get(api));
- return object.get("addr", String.class);
- }
- /**
- * 根据ip获取详细地址
- */
- public static String getLocalCityInfo(String ip) {
- IpInfo ipInfo = IP_SEARCHER.memorySearch(ip);
- if(ipInfo != null){
- return ipInfo.getAddress();
- }
- return null;
- }
- public static String getBrowser(HttpServletRequest request) {
- UserAgent.ImmutableUserAgent userAgent = USER_AGENT_ANALYZER.parse(request.getHeader("User-Agent"));
- return userAgent.get(UserAgent.AGENT_NAME_VERSION).getValue();
- }
- /**
- * 获得当天是周几
- */
- public static String getWeekDay() {
- String[] weekDays = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
- Calendar cal = Calendar.getInstance();
- cal.setTime(new Date());
- int w = cal.get(Calendar.DAY_OF_WEEK) - 1;
- if (w < 0) {
- w = 0;
- }
- return weekDays[w];
- }
- /**
- * 获取当前机器的IP
- *
- * @return /
- */
- public static String getLocalIp() {
- try {
- InetAddress candidateAddress = null;
- // 遍历所有的网络接口
- for (Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); interfaces.hasMoreElements();) {
- NetworkInterface anInterface = interfaces.nextElement();
- // 在所有的接口下再遍历IP
- for (Enumeration<InetAddress> inetAddresses = anInterface.getInetAddresses(); inetAddresses.hasMoreElements();) {
- InetAddress inetAddr = inetAddresses.nextElement();
- // 排除loopback类型地址
- if (!inetAddr.isLoopbackAddress()) {
- if (inetAddr.isSiteLocalAddress()) {
- // 如果是site-local地址,就是它了
- return inetAddr.getHostAddress();
- } else if (candidateAddress == null) {
- // site-local类型的地址未被发现,先记录候选地址
- candidateAddress = inetAddr;
- }
- }
- }
- }
- if (candidateAddress != null) {
- return candidateAddress.getHostAddress();
- }
- // 如果没有发现 non-loopback地址.只能用最次选的方案
- InetAddress jdkSuppliedAddress = InetAddress.getLocalHost();
- if (jdkSuppliedAddress == null) {
- return "";
- }
- return jdkSuppliedAddress.getHostAddress();
- } catch (Exception e) {
- return "";
- }
- }
- }
|