From 1f28aaeaed3f7aba3f99e0eedc8ab8490f6b58e7 Mon Sep 17 00:00:00 2001 From: jerryjzhang Date: Fri, 21 Mar 2025 17:21:38 +0800 Subject: [PATCH] (feature)(auth)Add last_login field to User. --- .../authentication/pojo/UserWithPassword.java | 2 +- .../adaptor/DefaultUserAdaptor.java | 12 ++++- .../persistence/dataobject/UserDO.java | 52 ++----------------- .../main/resources/mapper/UserDOMapper.xml | 3 ++ .../tencent/supersonic/common/pojo/User.java | 13 +++-- .../config.update/sql-update-mysql.sql | 5 +- .../src/main/resources/db/schema-h2.sql | 1 + .../src/main/resources/db/schema-mysql.sql | 1 + .../src/main/resources/db/schema-postgres.sql | 1 + 9 files changed, 35 insertions(+), 55 deletions(-) diff --git a/auth/api/src/main/java/com/tencent/supersonic/auth/api/authentication/pojo/UserWithPassword.java b/auth/api/src/main/java/com/tencent/supersonic/auth/api/authentication/pojo/UserWithPassword.java index fc5dfbd05..4da31dac0 100644 --- a/auth/api/src/main/java/com/tencent/supersonic/auth/api/authentication/pojo/UserWithPassword.java +++ b/auth/api/src/main/java/com/tencent/supersonic/auth/api/authentication/pojo/UserWithPassword.java @@ -24,7 +24,7 @@ public class UserWithPassword extends User { public UserWithPassword(Long id, String name, String displayName, String email, String password, Integer isAdmin) { - super(id, name, displayName, email, isAdmin); + super(id, name, displayName, email, isAdmin, null); this.password = password; } diff --git a/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/adaptor/DefaultUserAdaptor.java b/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/adaptor/DefaultUserAdaptor.java index fb54432a5..9e1064b50 100644 --- a/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/adaptor/DefaultUserAdaptor.java +++ b/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/adaptor/DefaultUserAdaptor.java @@ -18,6 +18,7 @@ import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; +import java.sql.Timestamp; import java.util.List; import java.util.Optional; import java.util.Set; @@ -102,7 +103,9 @@ public class DefaultUserAdaptor implements UserAdaptor { TokenService tokenService = ContextUtils.getBean(TokenService.class); try { UserWithPassword user = getUserWithPassword(userReq); - return tokenService.generateToken(UserWithPassword.convert(user), appKey); + String token = tokenService.generateToken(UserWithPassword.convert(user), appKey); + updateLastLogin(userReq.getName()); + return token; } catch (Exception e) { log.error("", e); throw new RuntimeException("password encrypt error, please try again"); @@ -267,4 +270,11 @@ public class DefaultUserAdaptor implements UserAdaptor { userToken.setExpireDate(userTokenDO.getExpireDateTime()); return userToken; } + + private void updateLastLogin(String userName) { + UserRepository userRepository = ContextUtils.getBean(UserRepository.class); + UserDO userDO = userRepository.getUser(userName); + userDO.setLastLogin(new Timestamp(System.currentTimeMillis())); + userRepository.updateUser(userDO); + } } diff --git a/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/persistence/dataobject/UserDO.java b/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/persistence/dataobject/UserDO.java index 341119b59..bc5d684ad 100644 --- a/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/persistence/dataobject/UserDO.java +++ b/auth/authentication/src/main/java/com/tencent/supersonic/auth/authentication/persistence/dataobject/UserDO.java @@ -3,7 +3,11 @@ package com.tencent.supersonic.auth.authentication.persistence.dataobject; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import java.sql.Timestamp; + +@Data @TableName("s2_user") public class UserDO { @@ -27,71 +31,25 @@ public class UserDO { /** */ private Integer isAdmin; - /** @return id */ - public Long getId() { - return id; - } - - /** @param id */ - public void setId(Long id) { - this.id = id; - } - - /** @return name */ - public String getName() { - return name; - } + private Timestamp lastLogin; /** @param name */ public void setName(String name) { this.name = name == null ? null : name.trim(); } - /** @return password */ - public String getPassword() { - return password; - } - /** @param password */ public void setPassword(String password) { this.password = password == null ? null : password.trim(); } - public String getSalt() { - return salt; - } - public void setSalt(String salt) { this.salt = salt == null ? null : salt.trim(); } - /** @return display_name */ - public String getDisplayName() { - return displayName; - } - - /** @param displayName */ - public void setDisplayName(String displayName) { - this.displayName = displayName == null ? null : displayName.trim(); - } - - /** @return email */ - public String getEmail() { - return email; - } - /** @param email */ public void setEmail(String email) { this.email = email == null ? null : email.trim(); } - /** @return is_admin */ - public Integer getIsAdmin() { - return isAdmin; - } - - /** @param isAdmin */ - public void setIsAdmin(Integer isAdmin) { - this.isAdmin = isAdmin; - } } diff --git a/auth/authentication/src/main/resources/mapper/UserDOMapper.xml b/auth/authentication/src/main/resources/mapper/UserDOMapper.xml index 4bb7ada14..64f9e7040 100644 --- a/auth/authentication/src/main/resources/mapper/UserDOMapper.xml +++ b/auth/authentication/src/main/resources/mapper/UserDOMapper.xml @@ -136,6 +136,9 @@ is_admin = #{isAdmin,jdbcType=INTEGER}, + + last_login = #{lastLogin,jdbcType=TIMESTAMP}, + where id = #{id,jdbcType=BIGINT} diff --git a/common/src/main/java/com/tencent/supersonic/common/pojo/User.java b/common/src/main/java/com/tencent/supersonic/common/pojo/User.java index b85194984..2d947033d 100644 --- a/common/src/main/java/com/tencent/supersonic/common/pojo/User.java +++ b/common/src/main/java/com/tencent/supersonic/common/pojo/User.java @@ -6,6 +6,7 @@ import lombok.NoArgsConstructor; import org.apache.commons.lang3.StringUtils; import java.io.Serializable; +import java.sql.Timestamp; @Data @NoArgsConstructor @@ -22,26 +23,28 @@ public class User implements Serializable { private Integer isAdmin; + private Timestamp lastLogin; + public static User get(Long id, String name, String displayName, String email, Integer isAdmin) { - return new User(id, name, displayName, email, isAdmin); + return new User(id, name, displayName, email, isAdmin, null); } public static User get(Long id, String name) { - return new User(id, name, name, name, 0); + return new User(id, name, name, name, 0, null); } public static User getDefaultUser() { - return new User(1L, "admin", "admin", "admin@email", 1); + return new User(1L, "admin", "admin", "admin@email", 1, null); } public static User getVisitUser() { - return new User(1L, "visit", "visit", "visit@email", 0); + return new User(1L, "visit", "visit", "visit@email", 0, null); } public static User getAppUser(int appId) { String name = String.format("app_%s", appId); - return new User(1L, name, name, "", 1); + return new User(1L, name, name, "", 1, null); } public String getDisplayName() { diff --git a/launchers/standalone/src/main/resources/config.update/sql-update-mysql.sql b/launchers/standalone/src/main/resources/config.update/sql-update-mysql.sql index 8c4b195bb..b7b6c1b9b 100644 --- a/launchers/standalone/src/main/resources/config.update/sql-update-mysql.sql +++ b/launchers/standalone/src/main/resources/config.update/sql-update-mysql.sql @@ -417,4 +417,7 @@ ALTER TABLE s2_model_rela alter column join_condition type text; --20250310 ALTER TABLE s2_chat_model add column is_open tinyint DEFAULT NULL COMMENT '是否公开'; -ALTER TABLE s2_database add column is_open tinyint DEFAULT NULL COMMENT '是否公开'; \ No newline at end of file +ALTER TABLE s2_database add column is_open tinyint DEFAULT NULL COMMENT '是否公开'; + +--20250321 +ALTER TABLE s2_user add column last_loin datetime DEFAULT NULL; \ No newline at end of file diff --git a/launchers/standalone/src/main/resources/db/schema-h2.sql b/launchers/standalone/src/main/resources/db/schema-h2.sql index d5fc98c5e..13928d300 100644 --- a/launchers/standalone/src/main/resources/db/schema-h2.sql +++ b/launchers/standalone/src/main/resources/db/schema-h2.sql @@ -129,6 +129,7 @@ create table IF NOT EXISTS s2_user salt varchar(256) NULL, email varchar(100) null, is_admin INT null, + last_login TIMESTAMP NULL, PRIMARY KEY (`id`) ); COMMENT ON TABLE s2_user IS 'user information table'; diff --git a/launchers/standalone/src/main/resources/db/schema-mysql.sql b/launchers/standalone/src/main/resources/db/schema-mysql.sql index 1e40d493f..712ad6f3f 100644 --- a/launchers/standalone/src/main/resources/db/schema-mysql.sql +++ b/launchers/standalone/src/main/resources/db/schema-mysql.sql @@ -388,6 +388,7 @@ CREATE TABLE IF NOT EXISTS s2_user salt varchar(256) DEFAULT NULL COMMENT 'md5密码盐', email varchar(100) null, is_admin tinyint null, + last_login datetime DEFAULT NULL, UNIQUE (`name`), PRIMARY KEY (`id`) ); diff --git a/launchers/standalone/src/main/resources/db/schema-postgres.sql b/launchers/standalone/src/main/resources/db/schema-postgres.sql index aac79316e..c5f7e96da 100644 --- a/launchers/standalone/src/main/resources/db/schema-postgres.sql +++ b/launchers/standalone/src/main/resources/db/schema-postgres.sql @@ -498,5 +498,6 @@ CREATE TABLE IF NOT EXISTS s2_user ( salt varchar(256) DEFAULT NULL, email varchar(100) NULL, is_admin smallint NULL, + last_login timestamp NULL, UNIQUE(name) ); \ No newline at end of file