yangzhengze пре 6 година
родитељ
комит
bebafd34b5
2 измењених фајлова са 177 додато и 3 уклоњено
  1. 3 3
      sql/ry_20180526.sql
  2. 174 0
      src/main/java/com/ruoyi/common/utils/AddressUtils.java

+ 3 - 3
sql/ry_20180526.sql

@@ -372,7 +372,7 @@ create table sys_oper_log (
   dept_name 		varchar(50)     default '' 		 	 	   comment '部门名称',
   dept_name 		varchar(50)     default '' 		 	 	   comment '部门名称',
   oper_url 		    varchar(255) 	default '' 				   comment '请求URL',
   oper_url 		    varchar(255) 	default '' 				   comment '请求URL',
   oper_ip 			varchar(30) 	default '' 				   comment '主机地址',
   oper_ip 			varchar(30) 	default '' 				   comment '主机地址',
-  oper_location    varchar(255) default ''   comment '操作地点',
+  oper_location    varchar(255)     default ''                 comment '操作地点',
   oper_param 		varchar(255) 	default '' 				   comment '请求参数',
   oper_param 		varchar(255) 	default '' 				   comment '请求参数',
   status 			int(1) 		    default 0				   comment '操作状态 0正常 1异常',
   status 			int(1) 		    default 0				   comment '操作状态 0正常 1异常',
   error_msg 		varchar(2000) 	default '' 				   comment '错误消息',
   error_msg 		varchar(2000) 	default '' 				   comment '错误消息',
@@ -476,7 +476,7 @@ create table sys_logininfor (
   info_id 		int(11) 	 not null auto_increment   comment '访问ID',
   info_id 		int(11) 	 not null auto_increment   comment '访问ID',
   login_name 	varchar(50)  default '' 			   comment '登录账号',
   login_name 	varchar(50)  default '' 			   comment '登录账号',
   ipaddr 		varchar(50)  default '' 			   comment '登录IP地址',
   ipaddr 		varchar(50)  default '' 			   comment '登录IP地址',
-  login_location   varchar(255) default '' comment '登录地点',
+  login_location   varchar(255)  default ''            comment '登录地点',
   browser  		varchar(50)  default '' 			   comment '浏览器类型',
   browser  		varchar(50)  default '' 			   comment '浏览器类型',
   os      		varchar(50)  default '' 			   comment '操作系统',
   os      		varchar(50)  default '' 			   comment '操作系统',
   status 		int(1) 		 default 0 			 	   comment '登录状态 0成功 1失败',
   status 		int(1) 		 default 0 			 	   comment '登录状态 0成功 1失败',
@@ -495,7 +495,7 @@ create table sys_user_online (
   login_name 	    varchar(50)  default '' 		 	 	comment '登录账号',
   login_name 	    varchar(50)  default '' 		 	 	comment '登录账号',
   dept_name 		varchar(50)  default '' 		 	 	comment '部门名称',
   dept_name 		varchar(50)  default '' 		 	 	comment '部门名称',
   ipaddr 		    varchar(50)  default '' 			 	comment '登录IP地址',
   ipaddr 		    varchar(50)  default '' 			 	comment '登录IP地址',
-  login_location   varchar(255) default ''   comment '登录地点',
+  login_location   varchar(255) default ''                  comment '登录地点',
   browser  		    varchar(50)  default '' 			 	comment '浏览器类型',
   browser  		    varchar(50)  default '' 			 	comment '浏览器类型',
   os      		    varchar(50)  default '' 			 	comment '操作系统',
   os      		    varchar(50)  default '' 			 	comment '操作系统',
   status      	    varchar(10)  default '' 			 	comment '在线状态on_line在线off_line离线',
   status      	    varchar(10)  default '' 			 	comment '在线状态on_line在线off_line离线',

+ 174 - 0
src/main/java/com/ruoyi/common/utils/AddressUtils.java

@@ -0,0 +1,174 @@
+package com.ruoyi.common.utils;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+/**
+ * 获取地址类
+ */
+public class AddressUtils {
+    public static String getAddresses(String content, String encodingString) throws UnsupportedEncodingException {
+       /** 根据IP查询地址 http://ip.taobao.com/service/getIpInfo.php?ip=111.111.111.111*/
+        String urlStr = "http://ip.taobao.com/service/getIpInfo.php";
+        String returnStr = getResult(urlStr, content, encodingString);
+        if (returnStr != null) {
+            returnStr = decodeUnicode(returnStr);
+            String[] temp = returnStr.split(",");
+            if (temp.length < 3) {
+                return "0";
+            }
+            return returnStr;
+        }
+        return null;
+    }
+
+    /**
+     * 获取查询结果
+     * @param urlStr
+     * @param content
+     * @param encoding
+     * @return
+     */
+    private static String getResult(String urlStr, String content, String encoding) {
+        URL url = null;
+        HttpURLConnection connection = null;
+        try {
+            url = new URL(urlStr);
+            connection = (HttpURLConnection) url.openConnection();
+            connection.setConnectTimeout(2000);
+            connection.setReadTimeout(2000);
+            connection.setDoOutput(true);
+            connection.setDoInput(true);
+            connection.setRequestMethod("POST");
+            connection.setUseCaches(false);
+            connection.connect();
+            DataOutputStream out = new DataOutputStream(connection.getOutputStream());
+            out.writeBytes(content);
+            out.flush();
+            out.close();
+            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), encoding));
+            StringBuffer buffer = new StringBuffer();
+            String line = "";
+            while ((line = reader.readLine()) != null) {
+                buffer.append(line);
+            }
+            reader.close();
+            return buffer.toString();
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (connection != null) {
+                connection.disconnect();
+            }
+        }
+        return null;
+    }
+
+    /**
+     *
+     * @param theString
+     * @return
+     */
+    public static String decodeUnicode(String theString) {
+        char aChar;
+        int len = theString.length();
+        StringBuffer outBuffer = new StringBuffer(len);
+        for (int x = 0; x < len;) {
+            aChar = theString.charAt(x++);
+            if (aChar == '\\') {
+                aChar = theString.charAt(x++);
+                if (aChar == 'u') {
+                    int value = 0;
+                    for (int i = 0; i < 4; i++) {
+                        aChar = theString.charAt(x++);
+                        switch (aChar) {
+                            case '0':
+                            case '1':
+                            case '2':
+                            case '3':
+                            case '4':
+                            case '5':
+                            case '6':
+                            case '7':
+                            case '8':
+                            case '9':
+                                value = (value << 4) + aChar - '0';
+                                break;
+                            case 'a':
+                            case 'b':
+                            case 'c':
+                            case 'd':
+                            case 'e':
+                            case 'f':
+                                value = (value << 4) + 10 + aChar - 'a';
+                                break;
+                            case 'A':
+                            case 'B':
+                            case 'C':
+                            case 'D':
+                            case 'E':
+                            case 'F':
+                                value = (value << 4) + 10 + aChar - 'A';
+                                break;
+                            default:
+                                throw new IllegalArgumentException("Malformed      encoding.");
+                        }
+                    }
+                    outBuffer.append((char) value);
+                } else {
+                    if (aChar == 't') {
+                        aChar = '\t';
+                    } else if (aChar == 'r') {
+                        aChar = '\r';
+                    } else if (aChar == 'n') {
+                        aChar = '\n';
+                    } else if (aChar == 'f') {
+                        aChar = '\f';
+                    }
+                    outBuffer.append(aChar);
+                }
+            } else {
+                outBuffer.append(aChar);
+            }
+        }
+        return outBuffer.toString();
+    }
+
+    public static String getRealAddressByIP(String ip) {
+        String address = "";
+        try {
+
+            address = getAddresses("ip=" + ip, "utf-8");
+
+            ////把JSON文本parse成JSONObject,通俗就是把json文本转为json对象
+            JSONObject json= JSONObject.parseObject(address);
+
+            //通过其get的方法来获取data的value由于返回的是object对象,而data的value本身又是json字符串,所以我们可以进行强转
+            JSONObject object = (JSONObject)json.get("data");
+            String country=object.getString("country");
+            String region = object.getString("region");
+            String city = object.getString("city");
+            address = country+""+region + "" + city;
+        } catch (Exception e) {
+
+        }
+        return address;
+    }
+
+    public static void main(String[] args) {
+        try {
+            System.out.println(getAddresses("ip=111.85.32.37","utf-8"));
+        } catch (UnsupportedEncodingException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }
+        System.out.println(getRealAddressByIP("111.85.32.37"));
+    }
+}