Fix last login bug

This commit is contained in:
2023-10-30 00:24:39 +08:00
parent 1d74afd5cb
commit 97af1331e2
8 changed files with 45 additions and 15 deletions

View File

@@ -24,6 +24,8 @@ object UserConverter {
expiration = user.expiration, expiration = user.expiration,
credentialsExpiration = user.credentialsExpiration, credentialsExpiration = user.credentialsExpiration,
enable = user.enable?.let { it == 1 }, enable = user.enable?.let { it == 1 },
currentLoginTime = user.currentLoginTime,
currentLoginIp = user.currentLoginIp,
lastLoginTime = user.lastLoginTime, lastLoginTime = user.lastLoginTime,
lastLoginIp = user.lastLoginIp, lastLoginIp = user.lastLoginIp,
createTime = user.createTime, createTime = user.createTime,

View File

@@ -60,6 +60,18 @@ class User() : Serializable {
@TableField("enable") @TableField("enable")
var enable: Int? = null var enable: Int? = null
/**
* 当前登录时间
*/
@TableField("current_login_time")
var currentLoginTime: LocalDateTime? = null
/**
* 当前登录 IP
*/
@TableField("current_login_ip")
var currentLoginIp: String? = null
/** /**
* 上次登录时间 * 上次登录时间
*/ */
@@ -108,6 +120,6 @@ class User() : Serializable {
var operations: List<Operation>? = null var operations: List<Operation>? = null
override fun toString(): String { override fun toString(): String {
return "User(id=$id, username=$username, password=$password, locking=$locking, expiration=$expiration, credentialsExpiration=$credentialsExpiration, enable=$enable, lastLoginTime=$lastLoginTime, lastLoginIp=$lastLoginIp, createTime=$createTime, updateTime=$updateTime, deleted=$deleted, version=$version, roles=$roles, groups=$groups, menus=$menus, elements=$elements, operations=$operations)" return "User(id=$id, username=$username, password=$password, locking=$locking, expiration=$expiration, credentialsExpiration=$credentialsExpiration, enable=$enable, currentLoginTime=$currentLoginTime, currentLoginIp=$currentLoginIp, lastLoginTime=$lastLoginTime, lastLoginIp=$lastLoginIp, createTime=$createTime, updateTime=$updateTime, deleted=$deleted, version=$version, roles=$roles, groups=$groups, menus=$menus, elements=$elements, operations=$operations)"
} }
} }

View File

@@ -36,14 +36,17 @@ class AuthenticationServiceImpl(
throw RuntimeException("Login failed") throw RuntimeException("Login failed")
} }
logger.info("用户登录 [用户名: '{}', IP: '{}']", user.username, request.remoteAddr)
userService.update(User().apply {
lastLoginIp = request.remoteAddr
lastLoginTime = LocalDateTime.now(ZoneOffset.UTC)
}, KtUpdateWrapper(User()).eq(User::username, user.username))
val loginUser = authentication.principal as LoginUser val loginUser = authentication.principal as LoginUser
loginUser.user.password = "" loginUser.user.password = ""
logger.info("用户登录 [用户名: '{}', IP: '{}']", user.username, request.remoteAddr)
userService.update(User().apply {
currentLoginIp = request.remoteAddr
currentLoginTime = LocalDateTime.now(ZoneOffset.UTC)
lastLoginIp = loginUser.user.currentLoginIp
lastLoginTime = loginUser.user.currentLoginTime
}, KtUpdateWrapper(User()).eq(User::username, user.username))
val userId = loginUser.user.id.toString() val userId = loginUser.user.id.toString()
val jwt = JwtUtil.createJwt(userId) val jwt = JwtUtil.createJwt(userId)

View File

@@ -22,6 +22,12 @@ data class UserInfoVo(
@Schema(description = "是否启用", example = "true") @Schema(description = "是否启用", example = "true")
val enable: Boolean?, val enable: Boolean?,
@Schema(description = "当前登录时间", example = "1900-01-01T00:00:00.000Z")
val currentLoginTime: LocalDateTime?,
@Schema(description = "当前登录 IP", example = "1.1.1.1")
val currentLoginIp: String?,
@Schema(description = "最后登录时间", example = "1900-01-01T00:00:00.000Z") @Schema(description = "最后登录时间", example = "1900-01-01T00:00:00.000Z")
val lastLoginTime: LocalDateTime?, val lastLoginTime: LocalDateTime?,

View File

@@ -41,14 +41,15 @@ on duplicate key update name = values(name),
power_id = values(power_id), power_id = values(power_id),
parent_id = values(parent_id); parent_id = values(parent_id);
insert into t_element(id, name, power_id, menu_id) insert into t_element(id, name, power_id, menu_id, parent_id)
values (1010100, '公用', id, 1010000), values (1010100, '公用', id, 1010000, null),
(101010100, '角色基础', id, 101010000), (101010100, '角色基础', id, 101010000, null),
(102010100, '用户组基础', id, 102010000), (102010100, '用户组基础', id, 102010000, null),
(103010100, '用户基础', id, 103010000) (103010100, '用户基础', id, 103010000, null)
on duplicate key update name = values(name), on duplicate key update name = values(name),
power_id=values(power_id), power_id=values(power_id),
menu_id = values(menu_id); menu_id = values(menu_id),
parent_id = values(parent_id);
insert into t_operation(id, name, code, power_id, element_id, parent_id) insert into t_operation(id, name, code, power_id, element_id, parent_id)
values (1010101, '查询当前用户信息', 'common:user:self', id, 1010100, null), values (1010101, '查询当前用户信息', 'common:user:self', id, 1010100, null),

View File

@@ -9,6 +9,8 @@ create table if not exists t_user
expiration datetime comment '过期时间', expiration datetime comment '过期时间',
credentials_expiration datetime comment '认证过期时间', credentials_expiration datetime comment '认证过期时间',
enable int not null comment '启用', enable int not null comment '启用',
current_login_time datetime comment '当前登录时间',
current_login_ip varchar(128) comment '当前登录 IP',
last_login_time datetime comment '上次登录时间', last_login_time datetime comment '上次登录时间',
last_login_ip varchar(128) comment '上次登录 IP', last_login_ip varchar(128) comment '上次登录 IP',
create_time datetime not null default (utc_timestamp()) comment '创建时间', create_time datetime not null default (utc_timestamp()) comment '创建时间',

View File

@@ -5,6 +5,6 @@ create table if not exists t_element
id bigint not null primary key, id bigint not null primary key,
name varchar(100) not null comment '元素名', name varchar(100) not null comment '元素名',
power_id bigint not null comment '权限ID', power_id bigint not null comment '权限ID',
parent_id bigint not null comment '父ID', parent_id bigint null comment '父ID',
menu_id bigint not null comment '菜单ID' menu_id bigint not null comment '菜单ID'
) comment '页面元素'; ) comment '页面元素';

View File

@@ -9,6 +9,8 @@
t_user.expiration as user_expiration, t_user.expiration as user_expiration,
t_user.credentials_expiration as user_credentials_expiration, t_user.credentials_expiration as user_credentials_expiration,
t_user.enable as user_enable, t_user.enable as user_enable,
t_user.current_login_time as user_current_login_time,
t_user.current_login_ip as user_current_login_ip,
t_user.last_login_time as user_last_login_time, t_user.last_login_time as user_last_login_time,
t_user.last_login_ip as user_last_login_ip, t_user.last_login_ip as user_last_login_ip,
t_user.create_time as user_create_time, t_user.create_time as user_create_time,
@@ -54,6 +56,8 @@
<result property="expiration" column="user_expiration"/> <result property="expiration" column="user_expiration"/>
<result property="credentialsExpiration" column="user_credentials_expiration"/> <result property="credentialsExpiration" column="user_credentials_expiration"/>
<result property="enable" column="user_enable"/> <result property="enable" column="user_enable"/>
<result property="currentLoginTime" column="user_current_login_time"/>
<result property="currentLoginIp" column="user_current_login_ip"/>
<result property="lastLoginTime" column="user_last_login_time"/> <result property="lastLoginTime" column="user_last_login_time"/>
<result property="lastLoginIp" column="user_last_login_ip"/> <result property="lastLoginIp" column="user_last_login_ip"/>
<result property="createTime" column="user_create_time"/> <result property="createTime" column="user_create_time"/>