Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
fgqyxxlr
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
yaru
fgqyxxlr
Commits
90f1ffee
Commit
90f1ffee
authored
May 29, 2018
by
yangzhengze
Committed by
若依
May 29, 2018
Browse files
Options
Browse Files
Download
Plain Diff
!5 增加操作日志操作地点、登录日志的登录地点、在线用户登录地点。
Merge pull request !5 from yangzhengze/master
parents
c4e18cbf
bebafd34
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
250 additions
and
14 deletions
+250
-14
sql/ry_20180526.sql
+3
-0
src/main/java/com/ruoyi/common/utils/AddressUtils.java
+174
-0
src/main/java/com/ruoyi/common/utils/IpUtils.java
+2
-1
src/main/java/com/ruoyi/common/utils/SystemLogUtils.java
+2
-0
src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
+5
-1
src/main/java/com/ruoyi/project/monitor/logininfor/domain/Logininfor.java
+14
-2
src/main/java/com/ruoyi/project/monitor/online/domain/UserOnline.java
+15
-1
src/main/java/com/ruoyi/project/monitor/operlog/domain/OperLog.java
+13
-2
src/main/resources/mybatis/monitor/LogininforMapper.xml
+3
-2
src/main/resources/mybatis/monitor/OnlineMapper.xml
+3
-2
src/main/resources/mybatis/monitor/OperLogMapper.xml
+3
-2
src/main/resources/static/ruoyi/monitor/logininfor/logininfor.js
+4
-0
src/main/resources/static/ruoyi/monitor/online/online.js
+4
-0
src/main/resources/static/ruoyi/monitor/operlog/operlog.js
+4
-0
src/main/resources/templates/monitor/operlog/detail.html
+1
-1
No files found.
sql/ry_20180526.sql
View file @
90f1ffee
...
...
@@ -372,6 +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_param
varchar
(
255
)
default
''
comment
'请求参数'
,
status
int
(
1
)
default
0
comment
'操作状态 0正常 1异常'
,
error_msg
varchar
(
2000
)
default
''
comment
'错误消息'
,
...
...
@@ -475,6 +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
'登录地点'
,
browser
varchar
(
50
)
default
''
comment
'浏览器类型'
,
os
varchar
(
50
)
default
''
comment
'操作系统'
,
status
int
(
1
)
default
0
comment
'登录状态 0成功 1失败'
,
...
...
@@ -493,6 +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
'登录地点'
,
browser
varchar
(
50
)
default
''
comment
'浏览器类型'
,
os
varchar
(
50
)
default
''
comment
'操作系统'
,
status
varchar
(
10
)
default
''
comment
'在线状态on_line在线off_line离线'
,
...
...
src/main/java/com/ruoyi/common/utils/AddressUtils.java
0 → 100644
View file @
90f1ffee
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"
));
}
}
src/main/java/com/ruoyi/common/utils/IpUtils.java
View file @
90f1ffee
...
...
@@ -37,6 +37,7 @@ public class IpUtils
{
ip
=
request
.
getRemoteAddr
();
}
return
ip
;
return
"0:0:0:0:0:0:0:1"
.
equals
(
ip
)
?
"127.0.0.1"
:
ip
;
}
}
src/main/java/com/ruoyi/common/utils/SystemLogUtils.java
View file @
90f1ffee
...
...
@@ -33,6 +33,7 @@ public class SystemLogUtils
{
StringBuilder
s
=
new
StringBuilder
();
s
.
append
(
LogUtils
.
getBlock
(
ShiroUtils
.
getIp
()));
s
.
append
(
AddressUtils
.
getRealAddressByIP
(
ShiroUtils
.
getIp
()));
s
.
append
(
LogUtils
.
getBlock
(
username
));
s
.
append
(
LogUtils
.
getBlock
(
status
));
s
.
append
(
LogUtils
.
getBlock
(
msg
));
...
...
@@ -61,6 +62,7 @@ public class SystemLogUtils
logininfor
.
setLoginName
(
username
);
logininfor
.
setStatus
(
status
);
logininfor
.
setIpaddr
(
ShiroUtils
.
getIp
());
logininfor
.
setLoginLocation
(
AddressUtils
.
getRealAddressByIP
(
ShiroUtils
.
getIp
()));
logininfor
.
setBrowser
(
browser
);
logininfor
.
setOs
(
os
);
logininfor
.
setMsg
(
message
);
...
...
src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
View file @
90f1ffee
...
...
@@ -3,6 +3,7 @@ package com.ruoyi.framework.aspectj;
import
java.lang.reflect.Method
;
import
java.util.Map
;
import
com.ruoyi.common.utils.AddressUtils
;
import
org.aspectj.lang.JoinPoint
;
import
org.aspectj.lang.Signature
;
import
org.aspectj.lang.annotation.AfterReturning
;
...
...
@@ -72,7 +73,7 @@ public class LogAspect
}
@Async
pr
ivate
void
handleLog
(
final
JoinPoint
joinPoint
,
final
Exception
e
)
pr
otected
void
handleLog
(
final
JoinPoint
joinPoint
,
final
Exception
e
)
{
try
{
...
...
@@ -92,6 +93,9 @@ public class LogAspect
// 请求的地址
String
ip
=
ShiroUtils
.
getIp
();
operLog
.
setOperIp
(
ip
);
//操作地点
operLog
.
setOperLocation
(
AddressUtils
.
getRealAddressByIP
(
ip
));
operLog
.
setOperUrl
(
ServletUtils
.
getRequest
().
getRequestURI
());
if
(
currentUser
!=
null
)
{
...
...
src/main/java/com/ruoyi/project/monitor/logininfor/domain/Logininfor.java
View file @
90f1ffee
package
com
.
ruoyi
.
project
.
monitor
.
logininfor
.
domain
;
import
java.util.Date
;
import
com.ruoyi.framework.web.domain.BaseEntity
;
import
java.util.Date
;
/**
* 系统访问日志情况信息 sys_logininfor
*
...
...
@@ -19,6 +20,8 @@ public class Logininfor extends BaseEntity
private
String
status
;
/** 登录IP地址 */
private
String
ipaddr
;
/**登录地点*/
private
String
loginLocation
;
/** 浏览器类型 */
private
String
browser
;
/** 操作系统 */
...
...
@@ -68,6 +71,14 @@ public class Logininfor extends BaseEntity
this
.
ipaddr
=
ipaddr
;
}
public
String
getLoginLocation
()
{
return
loginLocation
;
}
public
void
setLoginLocation
(
String
loginLocation
)
{
this
.
loginLocation
=
loginLocation
;
}
public
String
getBrowser
()
{
return
browser
;
...
...
@@ -112,7 +123,7 @@ public class Logininfor extends BaseEntity
public
String
toString
()
{
return
"Logininfor [infoId="
+
infoId
+
", loginName="
+
loginName
+
", status="
+
status
+
", ipaddr="
+
ipaddr
+
", browser="
+
browser
+
", os="
+
os
+
", msg="
+
msg
+
", loginTime="
+
loginTime
+
"]"
;
+
",
loginLocation="
+
loginLocation
+
",
browser="
+
browser
+
", os="
+
os
+
", msg="
+
msg
+
", loginTime="
+
loginTime
+
"]"
;
}
}
\ No newline at end of file
src/main/java/com/ruoyi/project/monitor/online/domain/UserOnline.java
View file @
90f1ffee
package
com
.
ruoyi
.
project
.
monitor
.
online
.
domain
;
import
java.util.Date
;
import
com.ruoyi.common.utils.AddressUtils
;
import
com.ruoyi.framework.web.domain.BaseEntity
;
import
com.ruoyi.project.monitor.online.domain.OnlineSession.OnlineStatus
;
import
java.util.Date
;
/**
* 当前在线会话 sys_user_online
*
...
...
@@ -24,6 +26,9 @@ public class UserOnline extends BaseEntity
/** 登录IP地址 */
private
String
ipaddr
;
/**登录地址*/
private
String
longinLocation
;
/** 浏览器类型 */
private
String
browser
;
...
...
@@ -58,6 +63,7 @@ public class UserOnline extends BaseEntity
online
.
setLastAccessTime
(
session
.
getLastAccessTime
());
online
.
setExpireTime
(
session
.
getTimeout
());
online
.
setIpaddr
(
session
.
getHost
());
online
.
setLonginLocation
(
AddressUtils
.
getRealAddressByIP
(
session
.
getHost
()));
online
.
setBrowser
(
session
.
getBrowser
());
online
.
setOs
(
session
.
getOs
());
online
.
setStatus
(
session
.
getStatus
());
...
...
@@ -105,6 +111,14 @@ public class UserOnline extends BaseEntity
this
.
ipaddr
=
ipaddr
;
}
public
String
getLonginLocation
()
{
return
longinLocation
;
}
public
void
setLonginLocation
(
String
longinLocation
)
{
this
.
longinLocation
=
longinLocation
;
}
public
String
getBrowser
()
{
return
browser
;
...
...
src/main/java/com/ruoyi/project/monitor/operlog/domain/OperLog.java
View file @
90f1ffee
package
com
.
ruoyi
.
project
.
monitor
.
operlog
.
domain
;
import
java.util.Date
;
import
com.ruoyi.framework.web.domain.BaseEntity
;
import
java.util.Date
;
/**
* 操作日志记录 oper_log
*
...
...
@@ -29,6 +30,8 @@ public class OperLog extends BaseEntity
private
String
operUrl
;
/** 操作地址 */
private
String
operIp
;
/** 操作地点*/
private
String
operLocation
;
/** 请求参数 */
private
String
operParam
;
/** 状态0正常 1异常 */
...
...
@@ -128,6 +131,14 @@ public class OperLog extends BaseEntity
this
.
operIp
=
operIp
;
}
public
String
getOperLocation
()
{
return
operLocation
;
}
public
void
setOperLocation
(
String
operLocation
)
{
this
.
operLocation
=
operLocation
;
}
public
String
getOperParam
()
{
return
operParam
;
...
...
@@ -173,7 +184,7 @@ public class OperLog extends BaseEntity
{
return
"OperLog [operId="
+
operId
+
", title="
+
title
+
", action="
+
action
+
", method="
+
method
+
", channel="
+
channel
+
", loginName="
+
loginName
+
", deptName="
+
deptName
+
", operUrl="
+
operUrl
+
", operIp="
+
operIp
+
", operParam="
+
operParam
+
", status="
+
status
+
", errorMsg="
+
operUrl
+
", operIp="
+
operIp
+
", oper
Location="
+
operLocation
+
", oper
Param="
+
operParam
+
", status="
+
status
+
", errorMsg="
+
errorMsg
+
", operTime="
+
operTime
+
"]"
;
}
...
...
src/main/resources/mybatis/monitor/LogininforMapper.xml
View file @
90f1ffee
...
...
@@ -9,6 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result
property=
"loginName"
column=
"login_name"
/>
<result
property=
"status"
column=
"status"
/>
<result
property=
"ipaddr"
column=
"ipaddr"
/>
<result
property=
"loginLocation"
column=
"login_location"
/>
<result
property=
"browser"
column=
"browser"
/>
<result
property=
"os"
column=
"os"
/>
<result
property=
"msg"
column=
"msg"
/>
...
...
@@ -16,8 +17,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<insert
id=
"insertLogininfor"
parameterType=
"Logininfor"
>
insert into sys_logininfor (login_name, status, ipaddr,
browser, os, msg, login_time)
values (#{loginName}, #{status}, #{ipaddr}, #{browser}, #{os}, #{msg}, sysdate())
insert into sys_logininfor (login_name, status, ipaddr,
login_location, browser, os, msg, login_time)
values (#{loginName}, #{status}, #{ipaddr}, #{
loginLocation}, #{
browser}, #{os}, #{msg}, sysdate())
</insert>
<select
id=
"selectLogininforList"
parameterType=
"Logininfor"
resultMap=
"LogininforResult"
>
...
...
src/main/resources/mybatis/monitor/OnlineMapper.xml
View file @
90f1ffee
...
...
@@ -9,6 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result
property=
"loginName"
column=
"login_name"
/>
<result
property=
"deptName"
column=
"dept_name"
/>
<result
property=
"ipaddr"
column=
"ipaddr"
/>
<result
property=
"longinLocation"
column=
"login_location"
/>
<result
property=
"browser"
column=
"browser"
/>
<result
property=
"os"
column=
"os"
/>
<result
property=
"status"
column=
"status"
/>
...
...
@@ -32,8 +33,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<insert
id=
"saveOnline"
parameterType=
"UserOnline"
>
replace into sys_user_online(sessionId, login_name, dept_name, ipaddr,
browser, os, status, start_timestsamp, last_access_time, expire_time)
values (#{sessionId}, #{loginName}, #{deptName}, #{ipaddr}, #{browser}, #{os}, #{status}, #{startTimestamp}, #{lastAccessTime}, #{expireTime})
replace into sys_user_online(sessionId, login_name, dept_name, ipaddr,
login_location, browser, os, status, start_timestsamp, last_access_time, expire_time)
values (#{sessionId}, #{loginName}, #{deptName}, #{ipaddr}, #{
longinLocation}, #{
browser}, #{os}, #{status}, #{startTimestamp}, #{lastAccessTime}, #{expireTime})
</insert>
<delete
id=
"deleteOnlineById"
parameterType=
"String"
>
...
...
src/main/resources/mybatis/monitor/OperLogMapper.xml
View file @
90f1ffee
...
...
@@ -14,6 +14,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result
property=
"deptName"
column=
"dept_name"
/>
<result
property=
"operUrl"
column=
"oper_url"
/>
<result
property=
"operIp"
column=
"oper_ip"
/>
<result
property=
"operLocation"
column=
"oper_location"
/>
<result
property=
"operParam"
column=
"oper_param"
/>
<result
property=
"status"
column=
"status"
/>
<result
property=
"errorMsg"
column=
"error_msg"
/>
...
...
@@ -21,8 +22,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</resultMap>
<insert
id=
"insertOperlog"
parameterType=
"OperLog"
>
insert into sys_oper_log(title, action, method, channel, login_name, dept_name, oper_url, oper_ip, oper_
param, status, error_msg, oper_time)
values (#{title}, #{action}, #{method}, #{channel}, #{loginName}, #{deptName}, #{operUrl}, #{operIp}, #{operParam}, #{status}, #{errorMsg}, sysdate())
insert into sys_oper_log(title, action, method, channel, login_name, dept_name, oper_url, oper_ip, oper_
location, oper_param, status, error_msg, oper_time)
values (#{title}, #{action}, #{method}, #{channel}, #{loginName}, #{deptName}, #{operUrl}, #{operIp}, #{oper
Location}, #{oper
Param}, #{status}, #{errorMsg}, sysdate())
</insert>
<select
id=
"selectOperLogList"
parameterType=
"OperLog"
resultMap=
"OperLogResult"
>
...
...
src/main/resources/static/ruoyi/monitor/logininfor/logininfor.js
View file @
90f1ffee
...
...
@@ -17,6 +17,10 @@ $(function() {
title
:
'主机'
},
{
field
:
'loginLocation'
,
title
:
'登录地点'
},
{
field
:
'browser'
,
title
:
'浏览器'
},
...
...
src/main/resources/static/ruoyi/monitor/online/online.js
View file @
90f1ffee
...
...
@@ -21,6 +21,10 @@ $(function() {
title
:
'主机'
},
{
field
:
'longinLocation'
,
title
:
'登录地点'
},
{
field
:
'browser'
,
title
:
'浏览器'
},
...
...
src/main/resources/static/ruoyi/monitor/operlog/operlog.js
View file @
90f1ffee
...
...
@@ -29,6 +29,10 @@ $(function() {
title
:
'主机'
},
{
field
:
'operLocation'
,
title
:
'操作地点'
},
{
field
:
'status'
,
title
:
'操作状态'
,
align
:
'center'
,
...
...
src/main/resources/templates/monitor/operlog/detail.html
View file @
90f1ffee
...
...
@@ -13,7 +13,7 @@
</div>
<div
class=
"form-group"
>
<label
class=
"col-sm-2 control-label"
>
登录信息:
</label>
<div
class=
"form-control-static"
th:text=
"${operLog.loginName} + ' / ' + ${operLog.deptName} + ' / ' + ${operLog.operIp}"
>
<div
class=
"form-control-static"
th:text=
"${operLog.loginName} + ' / ' + ${operLog.deptName} + ' / ' + ${operLog.operIp}
+ ' / ' + ${operLog.operLocation}
"
>
</div>
</div>
<div
class=
"form-group"
>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment