Selaa lähdekoodia

update 优化 sys_logininfor 丰富多种信息

疯狂的狮子li 3 vuotta sitten
vanhempi
commit
5853b74efe

+ 19 - 1
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;
 
     /**
      * 请求参数

+ 18 - 1
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)) {

+ 15 - 0
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;
+
     /**
      * 提示消息
      */

+ 4 - 1
ruoyi-ui/src/views/system/logininfor/index.vue

@@ -102,7 +102,10 @@
       <el-table-column type="selection" width="55" align="center" />
       <el-table-column label="访问编号" align="center" prop="infoId" />
       <el-table-column label="用户名称" align="center" prop="userName" :show-overflow-tooltip="true" sortable="custom" :sort-orders="['descending', 'ascending']" />
-      <el-table-column label="地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" />
+      <el-table-column label="登录地址" align="center" prop="ipaddr" width="130" :show-overflow-tooltip="true" />
+      <el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
+      <el-table-column label="浏览器" align="center" prop="browser" :show-overflow-tooltip="true" />
+      <el-table-column label="操作系统" align="center" prop="os" />
       <el-table-column label="登录状态" align="center" prop="status">
         <template slot-scope="scope">
           <dict-tag :options="dict.type.sys_common_status" :value="scope.row.status"/>

+ 9 - 3
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 '访问时间';
 
 
 -- ----------------------------

+ 16 - 10
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);
-
-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 '访问时间';
+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.login_time     is '访问时间';
 
 -- ----------------------------
 -- 17、通知公告表

+ 6 - 3
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 = '系统访问记录';
 
 -- ----------------------------