1. package com.example.util;
  2.  
  3. import javax.servlet.http.HttpServletRequest;
  4.  
  5. /**
    * get remote msg
    * 获取访问的ip地址
    */
    public class RequestMsgUtils {
  6.  
  7. /**
    * get remote ip address
    * @param request
    * @return
    */
    public static String getRemoteIP(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();
    }
    if (ip == null || ip.length() == 0 ||"unknown".equalsIgnoreCase(ip)) {
    ip = request.getHeader("http_client_ip");
    }
    if (ip == null || ip.length() == 0 ||"unknown".equalsIgnoreCase(ip)) {
    ip = request.getHeader("HTTP_X_FORWARDED_FOR");
    }
    // 如果是多级代理,那么取第一个ip为客户ip
    if (ip != null && ip.contains(",")) {
    ip = ip.substring(ip.lastIndexOf(",") + 1, ip.length()).trim();
    }
    return ip;
    }
  8.  
  9. public static String getOsAndBrowserInfo(HttpServletRequest request){
    String userAgent = request.getHeader("User-Agent");
    String user = userAgent.toLowerCase();
  10.  
  11. String os = "";
    String browser = "";
  12.  
  13. //=================OS Info=======================
    if (userAgent.toLowerCase().contains("windows")) {
    os = "Windows";
    } else if(userAgent.toLowerCase().contains("mac")) {
    os = "Mac";
    } else if(userAgent.toLowerCase().contains("x11")) {
    os = "Unix";
    } else if(userAgent.toLowerCase().contains("android")) {
    os = "Android";
    } else if(userAgent.toLowerCase().contains("iphone")) {
    os = "IPhone";
    }else{
    os = "UnKnown, More-Info: "+userAgent;
    }
    //===============Browser===========================
    if (user.contains("edge")) {
    browser=(userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-");
    } else if (user.contains("msie")) {
    String substring=userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0];
    browser=substring.split(" ")[0].replace("MSIE", "IE")+"-"+substring.split(" ")[1];
    } else if (user.contains("safari") && user.contains("version")) {
    browser=(userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0]
    + "-" +(userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
    } else if ( user.contains("opr") || user.contains("opera")) {
    if(user.contains("opera")){
    browser=(userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0]
    +"-"+(userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1];
    }else if(user.contains("opr")){
    browser=((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-"))
    .replace("OPR", "Opera");
    }
  14.  
  15. } else if (user.contains("chrome")) {
    browser=(userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-");
    } else if ((user.contains("mozilla/7.0")) || (user.contains("netscape6")) ||
    (user.contains("mozilla/4.7")) || (user.contains("mozilla/4.78")) ||
    (user.contains("mozilla/4.08")) || (user.contains("mozilla/3")) ) {
    browser = "Netscape-?";
  16.  
  17. } else if (user.contains("firefox")) {
    browser=(userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-");
    } else if(user.contains("rv")) {
    String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-");
    browser="IE" + IEVersion.substring(0,IEVersion.length() - 1);
    } else {
    browser = "UnKnown, More-Info: "+userAgent;
    }
    return os +" --- "+ browser ;
    }
    }

获取请求的ip工具类的更多相关文章

  1. java后端通过request对象获取请求的ip地址工具类

    package cn.zgjkw.battalion.util; import org.apache.log4j.Logger; import javax.servlet.http.HttpServl ...

  2. 系统获取 IP 工具类

    系统获取 IP 工具类 import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterf ...

  3. Java 获取IP工具类、Vo类整理记录

    前言 日常开发中,获取ip是常用的功能,本文记录如何在Java中获取本机外网ip.地理位置,访问用户的外网ip.地理位置,以及指定外网ip的地理位置: 代码编写 1.获取访问用户外网ip,我们从访问者 ...

  4. java获取真实ip工具类

    场景 有的时候我们需要获取客户端的真实ip,用来实现ip白名单,和黑名单的配置! ip工具类如下 package com.meeno.framework.utils; import javax.ser ...

  5. IP工具类-自己动手做个ip解析器

    IP工具类-自己动手做个ip解析器 一.资料准备 导入依赖包:

  6. Java常用工具类---IP工具类、File文件工具类

    package com.jarvis.base.util; import java.io.IOException;import java.io.InputStreamReader;import jav ...

  7. IP工具类

    import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.http.HttpServletReques ...

  8. 通过Request对象获取请求的IP地址

    /** * 标识要从哪些消息头中获取IP地址 */ private static final String[] getIpArray = {"HTTP_X_FORWARDED_FOR&quo ...

  9. Http请求通信(工具类)

    Http请求通信(工具类) 异步消息处理流程是: 首先需要在主线程当中创建一个Handle对象,并重写handlerMessage()方法. 然后当子线程中需要进行UI操作时,就创建一个Message ...

随机推荐

  1. Kali学习笔记1:Linux基本命令及安装Java

    ls -l 详细信息ls /dev/ -ls 很详细ls -a 显示隐藏ls -lh 方便看ls -lh --sort=size 按大小排序.开头的都是隐藏 cd /media/ 进入cd .. 上一 ...

  2. FTP--FileZilla-主动模式和被动模式

    PORT 主动模式: 用户主机一个随机端口连接FTP SERVER的TCP21端口进行协商: 用户主机告诉FTP SERVER,我的XXXX端口已经打开,你可以放心大胆的连过来: 然后FTP SERV ...

  3. 如何使用 GDB

    前期准备 启动GDB方法 设置运行参数 查看源码 断点break 使用 运行程序 查看运行时数据 查看内存数据 分割窗口 问题汇总 参考文献 GDB, The GNU Project debugger ...

  4. 使用以下映射将包含A-ZIS的字母的消息编码为数字:'A' - > 1,'B' - > 2 ...'Z' - > 26 给定包含数字的编码消息,确定解码方式的总数(python)(原创)

    题目:有一种将字母编码成数字的方式:'a'->1, 'b->2', ... , 'z->26'.现在给一串数字,给出有多少种可能的译码结果. 实现逻辑: 1,使用队列的数据类型,每一 ...

  5. 使用C# (.NET Core) 实现迭代器设计模式 (Iterator Pattern)

    本文的概念来自深入浅出设计模式一书 项目需求 有两个饭店合并了, 它们各自有自己的菜单. 饭店合并之后要保留这两份菜单. 这两个菜单是这样的: 菜单项MenuItem的代码是这样的: 最初我们是这样设 ...

  6. Java核心技术及面试指南 数据库方面的面试题归纳以及总结

    5.1.7.1 事务的四大特性是什么? ⑴ 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚. ⑵ 一致性(Consistency) 一致性是指事务必须使数据库 ...

  7. hibernate框架(1)---Hibernate增删改查

    Hibernate增删改查 1.首先我们要知道什么是Hibernate Hibernate是一个轻量级的ORMapping对象.主要用来实现Java和数据库表之间的映射,除此之外还提供数据查询和数据获 ...

  8. 【Android基础】利用Intent在Activity之间传递数据

    前言: 上一篇文章给大家聊了Intent的用法,如何用Intent启动Activity和隐式Intent,这一篇文章给大家聊聊如何利用Intent在Activity之间进行沟通.   从一个Activ ...

  9. Supervisor使用教程

    在项目中,经常有脚本需要常驻运行的需求.以PHP脚本为例,最简单的方式是: $ nohup php cli.php & 这样能保证当前终端被关闭或者按CRTL+C后,脚本仍在后台运行.但是没法 ...

  10. SQL语句方法语法总结(一)

    1.distinct:返回不重复.唯一的值. select distinct col_name from tbl_name --表中的col_name 列的值 如果有10条一样的,仅返回一条. 2.w ...