diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysLogininfor.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysLogininfor.java
index 883ec8e88..943325861 100644
--- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysLogininfor.java
+++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/SysLogininfor.java
@@ -54,6 +54,24 @@ public class SysLogininfor implements Serializable {
@ExcelProperty(value = "地址")
private String ipaddr;
+ /**
+ * 登录地点
+ */
+ @ExcelProperty(value = "登录地点")
+ private String loginLocation;
+
+ /**
+ * 浏览器类型
+ */
+ @ExcelProperty(value = "浏览器类型")
+ private String browser;
+
+ /**
+ * 操作系统
+ */
+ @ExcelProperty(value = "操作系统")
+ private String os;
+
/**
* 描述
*/
@@ -64,7 +82,7 @@ public class SysLogininfor implements Serializable {
* 访问时间
*/
@ExcelProperty(value = "访问时间")
- private Date accessTime;
+ private Date loginTime;
/**
* 请求参数
diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
index 1d1a7d854..426ed0459 100644
--- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
+++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java
@@ -4,6 +4,8 @@ import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.secure.BCrypt;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.http.useragent.UserAgent;
+import cn.hutool.http.useragent.UserAgentUtil;
import com.ruoyi.auth.form.RegisterBody;
import com.ruoyi.auth.properties.UserPasswordProperties;
import com.ruoyi.common.core.constant.CacheConstants;
@@ -17,6 +19,7 @@ import com.ruoyi.common.core.utils.MessageUtils;
import com.ruoyi.common.core.utils.ServletUtils;
import com.ruoyi.common.core.utils.SpringUtils;
import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.core.utils.ip.AddressUtils;
import com.ruoyi.common.log.event.LogininforEvent;
import com.ruoyi.common.redis.utils.RedisUtils;
import com.ruoyi.common.satoken.utils.LoginHelper;
@@ -29,6 +32,7 @@ import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import javax.servlet.http.HttpServletRequest;
import java.time.Duration;
import java.util.function.Supplier;
@@ -129,9 +133,22 @@ public class SysLoginService {
* @return
*/
public void recordLogininfor(String username, String status, String message) {
+ HttpServletRequest request = ServletUtils.getRequest();
+ final UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent"));
+ final String ip = ServletUtils.getClientIP(request);
+
+ String address = AddressUtils.getRealAddressByIP(ip);
+ // 获取客户端操作系统
+ String os = userAgent.getOs().getName();
+ // 获取客户端浏览器
+ String browser = userAgent.getBrowser().getName();
+ // 封装对象
LogininforEvent logininfor = new LogininforEvent();
logininfor.setUserName(username);
- logininfor.setIpaddr(ServletUtils.getClientIP());
+ logininfor.setIpaddr(ip);
+ logininfor.setLoginLocation(address);
+ logininfor.setBrowser(browser);
+ logininfor.setOs(os);
logininfor.setMsg(message);
// 日志状态
if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER)) {
diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/event/LogininforEvent.java b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/event/LogininforEvent.java
index 8f96e10dd..9da5d05c8 100644
--- a/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/event/LogininforEvent.java
+++ b/ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/event/LogininforEvent.java
@@ -30,6 +30,21 @@ public class LogininforEvent implements Serializable {
*/
private String ipaddr;
+ /**
+ * 登录地点
+ */
+ private String loginLocation;
+
+ /**
+ * 浏览器类型
+ */
+ private String browser;
+
+ /**
+ * 操作系统
+ */
+ private String os;
+
/**
* 提示消息
*/
diff --git a/ruoyi-ui/src/views/system/logininfor/index.vue b/ruoyi-ui/src/views/system/logininfor/index.vue
index 7364491ac..8db37f56f 100644
--- a/ruoyi-ui/src/views/system/logininfor/index.vue
+++ b/ruoyi-ui/src/views/system/logininfor/index.vue
@@ -102,7 +102,10 @@
-
+
+
+
+
diff --git a/sql/oracle/oracle_ry_cloud.sql b/sql/oracle/oracle_ry_cloud.sql
index ad805eeee..8afba8ca3 100644
--- a/sql/oracle/oracle_ry_cloud.sql
+++ b/sql/oracle/oracle_ry_cloud.sql
@@ -704,22 +704,28 @@ create table sys_logininfor (
info_id number(20) not null,
user_name varchar2(50) default '',
ipaddr varchar2(128) default '',
+ login_location varchar2(255) default '',
+ browser varchar2(50) default '',
+ os varchar2(50) default '',
status char(1) default '0',
msg varchar2(255) default '',
- access_time date
+ login_time date
);
alter table sys_logininfor add constraint pk_sys_logininfor primary key (info_id);
create unique index idx_sys_logininfor_s on sys_logininfor (status);
-create unique index idx_sys_logininfor_lt on sys_logininfor (access_time);
+create unique index idx_sys_logininfor_lt on sys_logininfor (login_time);
comment on table sys_logininfor is '系统访问记录';
comment on column sys_logininfor.info_id is '访问ID';
comment on column sys_logininfor.user_name is '登录账号';
comment on column sys_logininfor.ipaddr is '登录IP地址';
+comment on column sys_logininfor.login_location is '登录地点';
+comment on column sys_logininfor.browser is '浏览器类型';
+comment on column sys_logininfor.os is '操作系统';
comment on column sys_logininfor.status is '登录状态(0成功 1失败)';
comment on column sys_logininfor.msg is '提示消息';
-comment on column sys_logininfor.access_time is '访问时间';
+comment on column sys_logininfor.login_time is '访问时间';
-- ----------------------------
diff --git a/sql/postgres/postgres_ry_cloud.sql b/sql/postgres/postgres_ry_cloud.sql
index acbaf30d8..9d5e77533 100644
--- a/sql/postgres/postgres_ry_cloud.sql
+++ b/sql/postgres/postgres_ry_cloud.sql
@@ -719,22 +719,28 @@ create table if not exists sys_logininfor
info_id int8,
user_name varchar(50) default ''::varchar,
ipaddr varchar(128) default ''::varchar,
+ login_location varchar(255) default ''::varchar,
+ browser varchar(50) default ''::varchar,
+ os varchar(50) default ''::varchar,
status char default '0'::bpchar,
msg varchar(255) default ''::varchar,
- access_time timestamp,
+ login_time timestamp,
constraint sys_logininfor_pk primary key (info_id)
);
create unique index idx_sys_logininfor_s ON sys_logininfor (status);
-create unique index idx_sys_logininfor_lt ON sys_logininfor (access_time);
+create unique index idx_sys_logininfor_lt ON sys_logininfor (login_time);
-comment on table sys_logininfor is '系统访问记录';
-comment on column sys_logininfor.info_id is '访问ID';
-comment on column sys_logininfor.user_name is '用户账号';
-comment on column sys_logininfor.ipaddr is '登录IP地址';
-comment on column sys_logininfor.status is '登录状态(0成功 1失败)';
-comment on column sys_logininfor.msg is '提示消息';
-comment on column sys_logininfor.access_time is '访问时间';
+comment on table sys_logininfor is '系统访问记录';
+comment on column sys_logininfor.info_id is '访问ID';
+comment on column sys_logininfor.user_name is '用户账号';
+comment on column sys_logininfor.ipaddr is '登录IP地址';
+comment on column sys_logininfor.login_location is '登录地点';
+comment on column sys_logininfor.browser is '浏览器类型';
+comment on column sys_logininfor.os is '操作系统';
+comment on column sys_logininfor.status is '登录状态(0成功 1失败)';
+comment on column sys_logininfor.msg is '提示消息';
+comment on column sys_logininfor.login_time is '访问时间';
-- ----------------------------
-- 17、通知公告表
diff --git a/sql/ry-cloud.sql b/sql/ry-cloud.sql
index 415da2424..87ca93603 100644
--- a/sql/ry-cloud.sql
+++ b/sql/ry-cloud.sql
@@ -550,12 +550,15 @@ create table sys_logininfor (
info_id bigint(20) not null comment '访问ID',
user_name varchar(50) default '' comment '用户账号',
ipaddr varchar(128) default '' comment '登录IP地址',
+ login_location varchar(255) default '' comment '登录地点',
+ browser varchar(50) default '' comment '浏览器类型',
+ os varchar(50) default '' comment '操作系统',
status char(1) default '0' comment '登录状态(0成功 1失败)',
- msg varchar(255) default '' comment '提示信息',
- access_time datetime comment '访问时间',
+ msg varchar(255) default '' comment '提示消息',
+ login_time datetime comment '访问时间',
primary key (info_id),
key idx_sys_logininfor_s (status),
- key idx_sys_logininfor_lt (access_time)
+ key idx_sys_logininfor_lt (login_time)
) engine=innodb comment = '系统访问记录';
-- ----------------------------