java 获取uuid 获取ip 获取工具

简介: java 获取uuid 获取ip 获取工具

public class BaseUtils {

private static final String[] HAN_ARR = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
private static final String[] UNIT_ARR = {"十", "百", "千", "万", "十", "白", "千", "亿", "十", "百", "千"};
private static final char[] DEFAULT_ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyz".toCharArray();
private static Map<String, ScheduledFuture<?>> timedMap = new HashMap<>(1);

public static String generate32Id() {
    return UUID.randomUUID().toString().replace("-", "").toLowerCase();
}

/**
 * NanoId 32位
 *
 * @return
 */
public static String generate32IdNanoId() {
    return NanoId.randomNanoId(null, DEFAULT_ALPHABET, 32);
}

/**
 * 获取真实ip地址,避免获取代理ip
 */
public static String getIpAddress(HttpServletRequest request) {
    String ip = null;
    String ipAddresses = request.getHeader("X-Forwarded-For");
    String unknown = "unknown";
    if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
        ipAddresses = request.getHeader("Proxy-Client-IP");
    }
    if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
        ipAddresses = request.getHeader("WL-Proxy-Client-IP");
    }
    if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
        ipAddresses = request.getHeader("HTTP_CLIENT_IP");
    }
    if (ipAddresses == null || ipAddresses.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
        ipAddresses = request.getHeader("X-Real-IP");
    }
    if (ipAddresses != null && ipAddresses.length() != 0) {
        ip = ipAddresses.split(",")[0];
    }
    if (ip == null || ip.length() == 0 || unknown.equalsIgnoreCase(ipAddresses)) {
        ip = request.getRemoteAddr();
    }
    return ip;
}

public static String toHanStr(Integer number) {
    String numStr = number + "";
    StringBuilder result = new StringBuilder();
    int numLen = numStr.length();

    for (int i = 0; i < numLen; i++) {
        int num = numStr.charAt(i) - 48;
        if (i != numLen - 1 && num != 0) {
            result.append(HAN_ARR[num]).append(UNIT_ARR[numLen - 2 - i]);
            if (number >= 10 && number < 20) {
                result = new StringBuilder(result.substring(1));
            }
        } else {
            if (!(number >= 10 && number % 10 == 0)) {
                result.append(HAN_ARR[num]);
            }
        }
    }

    return result.toString();

}

public static Map<String, ScheduledFuture<?>> getTimedMap() {
    return timedMap;
}

public static void setTimedMap(Map<String, ScheduledFuture<?>> timedMap) {
    BaseUtils.timedMap = timedMap;
}

/**
 * 允许的文件类型
 */
public static final String[] ALLOWED_EXTENSIONS = {
        "jpg", "jpeg", "img", "png", "gif"
};


/**
 * 验证文件类型是否正确
 */
public static boolean isValidExtension(String extension) {
    for (String allowedExtension : ALLOWED_EXTENSIONS) {
        if (extension.equalsIgnoreCase(allowedExtension)) {
            return true;
        }
    }
    return false;
}


/**
 * 获取扩展名
 */
public static String getExtension(MultipartFile file) {
    String originalFilename = file.getOriginalFilename();
    return originalFilename.substring(originalFilename.lastIndexOf('.') + 1);
}

/**
 * @return
 */
public static String getIp() {
    //防止线程内调用 报错
    try {
        RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
        HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
        return getIpAddress(request);
    } catch (Exception e) {

    }
    return "";
}

}

相关文章
|
14天前
|
Java 流计算
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
31 1
Flink-03 Flink Java 3分钟上手 Stream 给 Flink-02 DataStreamSource Socket写一个测试的工具!
|
2天前
|
监控 Java 测试技术
Java开发现在比较缺少什么工具?
【10月更文挑战第15天】Java开发现在比较缺少什么工具?
11 1
|
8天前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
21 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
|
8天前
|
Java C++
做了个Java打包工具,可以双击启动了!
本文介绍了作者日常使用Java和Swing进行开发的经验,以及Java程序分发时遇到的问题,如需要JRE环境。文中列举了几种常见的Java程序打包方法,并对比了各自的优缺点,最后作者结合这些方案,利用Winform开发了一款工具,将Java程序打包成二进制可执行文件,简化了分发流程。
做了个Java打包工具,可以双击启动了!
|
17天前
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
20 2
|
28天前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
67 5
|
27天前
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
44 3
|
27天前
|
SQL 安全 Java
JAVA代码审计SAST工具使用与漏洞特征
JAVA代码审计SAST工具使用与漏洞特征
43 1
|
27天前
|
SQL Java 索引
java小工具util系列2:字符串工具
java小工具util系列2:字符串工具
13 2
|
10天前
|
数据可视化 算法 Java
JAVA规则引擎工具
本文介绍了六款常用的Java规则引擎:Drools、IBM ODM、Easy Rules、jBPM、OpenL Tablets 和 Apache Camel。每款引擎都有其独特的特点和适用场景,如Drools的高效规则匹配、IBM ODM的Web界面管理、Easy Rules的轻量级特性、jBPM的流程管理、OpenL Tablets的Excel规则定义以及Apache Camel的路由和规则结合。选择合适的规则引擎可以显著提高系统的灵活性和可维护性。