From ce9cda5b87eeda2dbb2c87b879c3886ff24f8617 Mon Sep 17 00:00:00 2001 From: yangzhengze <1403014932@qq.com> Date: Tue, 29 May 2018 09:20:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=9C=B0=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/ry_20180526.sql | 6 +- .../com/ruoyi/common/utils/AddressUtils.java | 174 ++++++++++++++++++ 2 files changed, 177 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/ruoyi/common/utils/AddressUtils.java diff --git a/sql/ry_20180526.sql b/sql/ry_20180526.sql index cd971370..e0070bc3 100644 --- a/sql/ry_20180526.sql +++ b/sql/ry_20180526.sql @@ -372,7 +372,7 @@ create table sys_oper_log ( dept_name varchar(50) default '' comment '部门名称', oper_url varchar(255) default '' comment '请求URL', oper_ip varchar(30) default '' comment '主机地址', - oper_location varchar(255) default '' comment '操作地点', + oper_location varchar(255) default '' comment '操作地点', oper_param varchar(255) default '' comment '请求参数', status int(1) default 0 comment '操作状态 0正常 1异常', error_msg varchar(2000) default '' comment '错误消息', @@ -476,7 +476,7 @@ create table sys_logininfor ( info_id int(11) not null auto_increment comment '访问ID', login_name varchar(50) default '' comment '登录账号', ipaddr varchar(50) default '' comment '登录IP地址', - login_location varchar(255) default '' comment '登录地点', + login_location varchar(255) default '' comment '登录地点', browser varchar(50) default '' comment '浏览器类型', os varchar(50) default '' comment '操作系统', status int(1) default 0 comment '登录状态 0成功 1失败', @@ -495,7 +495,7 @@ create table sys_user_online ( login_name varchar(50) default '' comment '登录账号', dept_name varchar(50) default '' comment '部门名称', ipaddr varchar(50) default '' comment '登录IP地址', - login_location varchar(255) default '' comment '登录地点', + login_location varchar(255) default '' comment '登录地点', browser varchar(50) default '' comment '浏览器类型', os varchar(50) default '' comment '操作系统', status varchar(10) default '' comment '在线状态on_line在线off_line离线', diff --git a/src/main/java/com/ruoyi/common/utils/AddressUtils.java b/src/main/java/com/ruoyi/common/utils/AddressUtils.java new file mode 100644 index 00000000..89cf38df --- /dev/null +++ b/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")); + } +}