zoukankan      html  css  js  c++  java
  • HttpUtil 获取设备信息

    import com.alibaba.fastjson.JSON;
    import eu.bitwalker.useragentutils.OperatingSystem;
    import eu.bitwalker.useragentutils.UserAgent;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.http.HttpMethod;
    import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
    import org.springframework.security.web.util.matcher.RequestMatcher;
    import org.springframework.util.StringUtils;
    
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    /**
     * Created by tomas on 2017/6/4.
     */
    
    public class HttpUtil {
    
        public  static List<RequestMatcher> ignoreRequest = new ArrayList<>();
    
        private static final Logger logger = LoggerFactory.getLogger(HttpUtil.class);
    
        public static void ok(HttpServletRequest request, HttpServletResponse response) {
            responseOutWithJson(request, response, APIResult.ok());
        }
        public static void error(HttpServletRequest request, HttpServletResponse response, BaseCode code) {
            if(code.getCode() == APICode._C_OK){
                responseOutWithJson(request,response, APIResult.ok());
            }else {
                responseOutWithJson(request,response, APIResult.error(code));
            }
        }
        public static void responseOutWithJson(HttpServletRequest request, HttpServletResponse response, Object data) {
            //将实体对象转换为JSON Object转换
            processHeader(request, response);
            PrintWriter out = null;
            try {
                out = response.getWriter();
                out.append(JSON.toJSONString(data));
                logger.info("url= {} 返回JSON ={} ",request.getRequestURI(), JSON.toJSONString(data));
            } catch (IOException e) {
                logger.error("request ={} 返回 失败 e={}" ,request.getRequestURI(),e);
            } finally {
                if (out != null) {
                    out.close();
                }
            }
        }
    
        public static void processHeader(HttpServletRequest request, HttpServletResponse response) {
            String origin = request.getHeader("Origin");
            String headers = request.getHeader("Access-Control-Request-Headers");
            if (!StringUtils.isEmpty(headers)) {
                headers = ", " + headers;
            } else {
                headers = "";
            }
    
            response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Content-Type", "application/json;charset=UTF-8");
    
            if (!StringUtils.isEmpty(origin)) {
                response.setHeader("Access-Control-Allow-Origin", origin);
                response.setHeader("Access-Control-Allow-Methods", "GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE, PATCH");
                response.setHeader("Access-Control-Allow-Headers", "Origin, X-Token, Authentication, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization, Cache-control "+headers);
                response.setHeader("Access-Control-Allow-Credentials", "true");
            }
        }
    
        public static void delCookies(HttpServletRequest request, HttpServletResponse response, String...  cookies) {
            for (String cookieName : cookies) {
                Cookie cookie = new Cookie(cookieName, null);
                String cookiePath = request.getContextPath();
                if (!StringUtils.hasLength(cookiePath)) {
                    cookiePath = "/";
                }
                cookie.setPath(cookiePath);
                cookie.setMaxAge(0);
                response.addCookie(cookie);
            }
        }
    
        public static void antMatchers(HttpMethod httpMethod, String... antPatterns) {
            String method = httpMethod == null?null:httpMethod.toString();
            List<RequestMatcher> matchers = new ArrayList();
            String[] patterns = antPatterns;
            int length = antPatterns.length;
    
            for(int i = 0; i < length; ++i) {
                String pattern = patterns[i];
                matchers.add(new AntPathRequestMatcher(pattern, method));
            }
            ignoreRequest.addAll(matchers);
        }
        public static RequestMatcher[] getMatchersArray() {
           return ignoreRequest.toArray(new RequestMatcher[ignoreRequest.size()]);
        }
    
    
        /**
         * 获取请求basePath
         */
        public static String getBasePath(HttpServletRequest request) {
            StringBuffer basePath = new StringBuffer();
            String scheme = request.getScheme();
            String domain = request.getServerName();
            int port = request.getServerPort();
            basePath.append(scheme);
            basePath.append("://");
            basePath.append(domain);
            if("http".equalsIgnoreCase(scheme) && 80 != port) {
                basePath.append(":").append(String.valueOf(port));
            } else if("https".equalsIgnoreCase(scheme) && port != 443) {
                basePath.append(":").append(String.valueOf(port));
            }
            return basePath.toString();
        }
    
    
        /**
         * 获取请求主机  真实IP
         * @param request
         * @return
         */
        public static String getClientIp(HttpServletRequest request) {
            // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
            String ip = request.getHeader("X-Forwarded-For");
            if (logger.isInfoEnabled()) {
                logger.info("getIpAddress(HttpServletRequest) - X-Forwarded-For - String ip=" + ip);
            }
    
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
                if (logger.isInfoEnabled()) {
                    logger.info("getIpAddress(HttpServletRequest) - Proxy-Client-IP - String ip=" + ip);
                }
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
                if (logger.isInfoEnabled()) {
                    logger.info("getIpAddress(HttpServletRequest) - WL-Proxy-Client-IP - String ip=" + ip);
                }
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
                if (logger.isInfoEnabled()) {
                    logger.info("getIpAddress(HttpServletRequest) - HTTP_CLIENT_IP - String ip=" + ip);
                }
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
                if (logger.isInfoEnabled()) {
                    logger.info("getIpAddress(HttpServletRequest) - HTTP_X_FORWARDED_FOR - String ip=" + ip);
                }
            }
            if (StringUtils.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
                if (logger.isInfoEnabled()) {
                    logger.info("getIpAddress(HttpServletRequest) - getRemoteAddr - String ip=" + ip);
                }
            }
    
    
            return ip.split(",")[0];
        }
    
    
        /**
         * 根据IP获取MAC地址
         * @param request
         * @return
         */
        public static String getMacAddrByIp(HttpServletRequest request) {
            String ip = getClientIp(request);
            String macAddr = null;
            try {
                Process process = Runtime.getRuntime().exec("nbtstat -a " + ip);
                BufferedReader br = new BufferedReader(
                        new InputStreamReader(process.getInputStream()));
                Pattern pattern = Pattern.compile("([A-F0-9]{2}-){5}[A-F0-9]{2}");
                Matcher matcher;
                for (String strLine = br.readLine(); strLine != null;
                     strLine = br.readLine()) {
                    matcher = pattern.matcher(strLine);
                    if (matcher.find()) {
                        macAddr = matcher.group();
                        break;
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return macAddr;
        }
    
        /**
         * 获取系统版本信息
         * @param request
         * @return
         */
        public static String getSystemInfo(HttpServletRequest request){
            String systenInfo = null;
            String header = request.getHeader("user-agent");
            logger.info("获取系统版本信息:"+header);
            if(header == null || header.equals("")){
                return "";
            }
    
    
            //得到用户的操作系统
            if (header.indexOf("NT 6.0") > 0){
                systenInfo = "Windows Vista/Server 2008";
            } else if (header.indexOf("NT 5.2") > 0){
                systenInfo = "Windows Server 2003";
            } else if (header.indexOf("NT 5.1") > 0){
                systenInfo = "Windows XP";
            } else if (header.indexOf("NT 6.0") > 0){
                systenInfo = "Windows Vista";
            } else if (header.indexOf("NT 6.1") > 0){
                systenInfo = "Windows 7";
            } else if (header.indexOf("NT 6.2") > 0){
                systenInfo = "Windows Slate";
            } else if (header.indexOf("NT 6.3") > 0){
                systenInfo = "Windows 9";
            } else if (header.indexOf("NT 5") > 0){
                systenInfo = "Windows 2000";
            } else if (header.indexOf("NT 4") > 0){
                systenInfo = "Windows NT4";
            } else if (header.indexOf("Me") > 0){
                systenInfo = "Windows Me";
            } else if (header.indexOf("98") > 0){
                systenInfo = "Windows 98";
            } else if (header.indexOf("95") > 0){
                systenInfo = "Windows 95";
            } else if (header.indexOf("Mac") > 0){
                systenInfo = "Mac";
            } else if (header.indexOf("Unix") > 0){
                systenInfo = "UNIX";
            } else if (header.indexOf("Linux") > 0){
                systenInfo = "Linux";
            } else if (header.indexOf("SunOS") > 0){
                systenInfo = "SunOS";
            }
            return systenInfo;
        }
    
        public static UserAgent getUserAgent(String userAgentStr){
            return UserAgent.parseUserAgentString(userAgentStr);
        }
    
        /**
         * 获取设备类型
         * @param userAgentStr
         * @return
         */
        public static String getDeviceType(String userAgentStr) {
            if(StringUtils.isEmpty(userAgentStr)){
                return null;
            }
    
            UserAgent userAgent = getUserAgent(userAgentStr);
    
            //获取操作系统对象
            OperatingSystem operatingSystem = userAgent.getOperatingSystem();
    
            //获取设备类型
            return operatingSystem.getDeviceType().toString();
    
        }
    
        /**
         * 获取厂商
         * @param userAgentStr
         * @return
         */
        public static String getDeviceMfrs(String userAgentStr) {
            if(StringUtils.isEmpty(userAgentStr)){
                return null;
            }
    
            UserAgent userAgent = getUserAgent(userAgentStr);
    
            //获取操作系统对象
            OperatingSystem operatingSystem = userAgent.getOperatingSystem();
    
            //获取厂商
            return operatingSystem.getManufacturer().toString();
    
        }
    
        /**
         * 操作系统名称
         * @param userAgentStr
         * @return
         */
        public static String getDeviceName(String userAgentStr) {
            if(StringUtils.isEmpty(userAgentStr)){
                return null;
            }
    
            UserAgent userAgent = getUserAgent(userAgentStr);
    
            //获取操作系统对象
            OperatingSystem operatingSystem = userAgent.getOperatingSystem();
    
            //操作系统名称
            return operatingSystem.getName();
        }
    
        /**
         * 获取设备类型
         * @param userAgentStr
         * @return
         */
        public static String getDeviceModel(String userAgentStr) {
            if(StringUtils.isEmpty(userAgentStr)){
                return null;
            }
    
            UserAgent userAgent = getUserAgent(userAgentStr);
    
            //获取操作系统对象
            OperatingSystem operatingSystem = userAgent.getOperatingSystem();
            //操作系统名称
            String osName = operatingSystem.getName();
            //获取设备类型
            String deviceType = operatingSystem.getDeviceType().toString();
    
            //获取设备型号
            if ("MOBILE".equals(deviceType))
            {
                String split[] = userAgentStr.split("Build/");
    
                if(split!=null || split.length > 0)
                {
                    String splitType[] =  split[0].split(";");
                    if(splitType!=null && splitType.length>0)
                    {
                        return splitType[splitType.length-1];
                    }
    
                }
    
            }
            else if ("TABLET".equals(deviceType))
            {
                String split[] = userAgentStr.split("Build/");
    
                if(split!=null || split.length > 0)
                {
                    String splitType[] =  split[0].split(";");
                    if(splitType!=null && splitType.length>0)
                    {
                        return splitType[splitType.length-1];
                    }
    
                }
            }
    
            return osName;
        }
    }
  • 相关阅读:
    使用idea进行远程调试
    map根据属性排序、取出map前n个
    编写shell脚本一键启动 重启 停止springboot jar包
    IDEA给类和方法配置注释模板(参数换行显示)
    springboot文件上传报错
    WebMvcConfigurer 与 WebMvcConfigurationSupport避坑指南
    WebMvcConfigurerAdapter详解和过时后的替代方案
    springboot上传文件过大,全局异常捕获,客户端没有返回值
    javascript中Math.random()产生随机数总结
    关于微信中的localStorage及使用cookie的解决方案
  • 原文地址:https://www.cnblogs.com/lc0605/p/11356190.html
Copyright © 2011-2022 走看看