From 3e34dea4f5f857c718a6103f33333399b225f04e Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Sat, 19 Oct 2024 00:05:01 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=8A=A0=E5=85=A5=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E7=99=BB=E5=BD=95=E6=97=B6=E6=88=96=E9=80=80=E5=87=BA?= =?UTF-8?q?=E6=97=B6=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../generator/generator/WebGeneratorCode.java | 12 ++-- .../src/main/resources/vms/web/index.vm | 2 + .../common/service/utils/ip/IpEntity.java | 2 +- .../bunny/common/service/utils/ip/IpUtil.java | 2 +- .../bunny/dao/dto/log/UserLoginLogAddDto.java | 34 ---------- .../cn/bunny/dao/dto/log/UserLoginLogDto.java | 9 ++- .../dao/dto/log/UserLoginLogUpdateDto.java | 9 ++- .../cn/bunny/dao/entity/log/UserLoginLog.java | 11 ++-- .../cn/bunny/dao/vo/log/UserLoginLogVo.java | 9 ++- .../controller/UserDeptController.java | 20 ------ .../controller/UserLoginLogController.java | 8 --- .../bunny/services/factory/UserFactory.java | 40 ++++++++++-- .../services/service/UserLoginLogService.java | 8 --- .../service/impl/UserLoginLogServiceImpl.java | 14 ----- .../service/impl/UserServiceImpl.java | 20 ++++++ .../resources/mapper/UserLoginLogMapper.xml | 62 +++++++++---------- 16 files changed, 119 insertions(+), 143 deletions(-) delete mode 100644 dao/src/main/java/cn/bunny/dao/dto/log/UserLoginLogAddDto.java delete mode 100644 service/src/main/java/cn/bunny/services/controller/UserDeptController.java diff --git a/common/common-generator/src/main/java/cn/bunny/common/generator/generator/WebGeneratorCode.java b/common/common-generator/src/main/java/cn/bunny/common/generator/generator/WebGeneratorCode.java index 4af12f9..9337d4e 100644 --- a/common/common-generator/src/main/java/cn/bunny/common/generator/generator/WebGeneratorCode.java +++ b/common/common-generator/src/main/java/cn/bunny/common/generator/generator/WebGeneratorCode.java @@ -3,11 +3,7 @@ package cn.bunny.common.generator.generator; import cn.bunny.common.generator.entity.BaseField; import cn.bunny.common.generator.entity.BaseResultMap; import cn.bunny.common.generator.utils.GeneratorCodeUtils; -import cn.bunny.dao.dto.log.UserLoginLogAddDto; -import cn.bunny.dao.dto.log.UserLoginLogDto; -import cn.bunny.dao.dto.log.UserLoginLogUpdateDto; import cn.bunny.dao.entity.log.UserLoginLog; -import cn.bunny.dao.vo.log.UserLoginLogVo; import com.baomidou.mybatisplus.annotation.TableName; import com.google.common.base.CaseFormat; import io.swagger.v3.oas.annotations.media.Schema; @@ -52,10 +48,10 @@ public class WebGeneratorCode { public static void main(String[] args) throws Exception { Class originalClass = UserLoginLog.class; - Class dtoClass = UserLoginLogDto.class; - Class addDtoClass = UserLoginLogAddDto.class; - Class updateDtoClass = UserLoginLogUpdateDto.class; - Class voClass = UserLoginLogVo.class; + Class dtoClass = UserLoginLog.class; + Class addDtoClass = UserLoginLog.class; + Class updateDtoClass = UserLoginLog.class; + Class voClass = UserLoginLog.class; // 设置velocity资源加载器 Properties prop = new Properties(); diff --git a/common/common-generator/src/main/resources/vms/web/index.vm b/common/common-generator/src/main/resources/vms/web/index.vm index 307c4fc..b2565a5 100644 --- a/common/common-generator/src/main/resources/vms/web/index.vm +++ b/common/common-generator/src/main/resources/vms/web/index.vm @@ -62,6 +62,8 @@ onMounted(() => {
#foreach($item in $formList) + + diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/utils/ip/IpEntity.java b/common/service-utils/src/main/java/cn/bunny/common/service/utils/ip/IpEntity.java index 0b09e8b..44e3afa 100644 --- a/common/service-utils/src/main/java/cn/bunny/common/service/utils/ip/IpEntity.java +++ b/common/service-utils/src/main/java/cn/bunny/common/service/utils/ip/IpEntity.java @@ -14,7 +14,7 @@ import lombok.NoArgsConstructor; @ApiModel(value = "IpEntity对象", description = "用户IP相关信息") public class IpEntity { @ApiModelProperty("原始地址") - private String remoteAddr; + private String ipAddr; @ApiModelProperty("IP归属地") private String ipRegion; diff --git a/common/service-utils/src/main/java/cn/bunny/common/service/utils/ip/IpUtil.java b/common/service-utils/src/main/java/cn/bunny/common/service/utils/ip/IpUtil.java index 3658a2f..5feb6f6 100644 --- a/common/service-utils/src/main/java/cn/bunny/common/service/utils/ip/IpUtil.java +++ b/common/service-utils/src/main/java/cn/bunny/common/service/utils/ip/IpUtil.java @@ -92,7 +92,7 @@ public class IpUtil { ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); String remoteAddr = requestAttributes != null ? getIpAddr(requestAttributes.getRequest()) : "0:0:0:0:0:0:0:1"; String ipRegion = IpUtil.getIpRegion(remoteAddr); - return IpEntity.builder().remoteAddr(remoteAddr).ipRegion(ipRegion).build(); + return IpEntity.builder().ipAddr(remoteAddr).ipRegion(ipRegion).build(); } /** diff --git a/dao/src/main/java/cn/bunny/dao/dto/log/UserLoginLogAddDto.java b/dao/src/main/java/cn/bunny/dao/dto/log/UserLoginLogAddDto.java deleted file mode 100644 index 6f7c03e..0000000 --- a/dao/src/main/java/cn/bunny/dao/dto/log/UserLoginLogAddDto.java +++ /dev/null @@ -1,34 +0,0 @@ -package cn.bunny.dao.dto.log; - -import io.swagger.v3.oas.annotations.media.Schema; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; - -@Data -@AllArgsConstructor -@NoArgsConstructor -@Builder -@Schema(name = "UserLoginLogDto对象", title = "用户登录日志分页查询", description = "用户登录日志分页查询") -public class UserLoginLogAddDto { - - @Schema(name = "userId", title = "用户Id") - private Long userId; - - @Schema(name = "username", title = "用户名") - private String username; - - @Schema(name = "token", title = "登录token") - private String token; - - @Schema(name = "ip", title = "登录Ip") - private String ip; - - @Schema(name = "ipAddress", title = "登录Ip地点") - private String ipAddress; - - @Schema(name = "userAgent", title = "登录时代理") - private String userAgent; - -} diff --git a/dao/src/main/java/cn/bunny/dao/dto/log/UserLoginLogDto.java b/dao/src/main/java/cn/bunny/dao/dto/log/UserLoginLogDto.java index aa65beb..d1126f8 100644 --- a/dao/src/main/java/cn/bunny/dao/dto/log/UserLoginLogDto.java +++ b/dao/src/main/java/cn/bunny/dao/dto/log/UserLoginLogDto.java @@ -22,14 +22,17 @@ public class UserLoginLogDto { @Schema(name = "token", title = "登录token") private String token; - @Schema(name = "ip", title = "登录Ip") - private String ip; - @Schema(name = "ipAddress", title = "登录Ip地点") private String ipAddress; + @Schema(name = "ipRegion", title = "登录Ip") + private String ipRegion; + @Schema(name = "userAgent", title = "登录时代理") private String userAgent; + @Schema(name = "type", title = "操作类型") + private String type; + } diff --git a/dao/src/main/java/cn/bunny/dao/dto/log/UserLoginLogUpdateDto.java b/dao/src/main/java/cn/bunny/dao/dto/log/UserLoginLogUpdateDto.java index 6f3998c..2db78f2 100644 --- a/dao/src/main/java/cn/bunny/dao/dto/log/UserLoginLogUpdateDto.java +++ b/dao/src/main/java/cn/bunny/dao/dto/log/UserLoginLogUpdateDto.java @@ -22,13 +22,16 @@ public class UserLoginLogUpdateDto { @Schema(name = "token", title = "登录token") private String token; - @Schema(name = "ip", title = "登录Ip") - private String ip; - @Schema(name = "ipAddress", title = "登录Ip地点") private String ipAddress; + @Schema(name = "ipRegion", title = "登录Ip") + private String ipRegion; + @Schema(name = "userAgent", title = "登录时代理") private String userAgent; + @Schema(name = "type", title = "操作类型") + private String type; + } \ No newline at end of file diff --git a/dao/src/main/java/cn/bunny/dao/entity/log/UserLoginLog.java b/dao/src/main/java/cn/bunny/dao/entity/log/UserLoginLog.java index b58c80a..f3440b5 100644 --- a/dao/src/main/java/cn/bunny/dao/entity/log/UserLoginLog.java +++ b/dao/src/main/java/cn/bunny/dao/entity/log/UserLoginLog.java @@ -31,13 +31,16 @@ public class UserLoginLog extends BaseEntity { @Schema(name = "token", title = "登录token") private String token; - @Schema(name = "ip", title = "登录Ip") - private String ip; - - @Schema(name = "ipAddress", title = "登录Ip地点") + @Schema(name = "ipAddress", title = "登录Ip") private String ipAddress; + @Schema(name = "ipRegion", title = "登录Ip归属地") + private String ipRegion; + @Schema(name = "userAgent", title = "登录时代理") private String userAgent; + @Schema(name = "type", title = "操作类型") + private String type; + } diff --git a/dao/src/main/java/cn/bunny/dao/vo/log/UserLoginLogVo.java b/dao/src/main/java/cn/bunny/dao/vo/log/UserLoginLogVo.java index 8b509f1..7ad9190 100644 --- a/dao/src/main/java/cn/bunny/dao/vo/log/UserLoginLogVo.java +++ b/dao/src/main/java/cn/bunny/dao/vo/log/UserLoginLogVo.java @@ -21,13 +21,16 @@ public class UserLoginLogVo extends BaseVo { @Schema(name = "token", title = "登录token") private String token; - @Schema(name = "ip", title = "登录Ip") - private String ip; - @Schema(name = "ipAddress", title = "登录Ip地点") private String ipAddress; + @Schema(name = "ipRegion", title = "登录Ip") + private String ipRegion; + @Schema(name = "userAgent", title = "登录时代理") private String userAgent; + @Schema(name = "type", title = "操作类型") + private String type; + } \ No newline at end of file diff --git a/service/src/main/java/cn/bunny/services/controller/UserDeptController.java b/service/src/main/java/cn/bunny/services/controller/UserDeptController.java deleted file mode 100644 index 078dde3..0000000 --- a/service/src/main/java/cn/bunny/services/controller/UserDeptController.java +++ /dev/null @@ -1,20 +0,0 @@ -package cn.bunny.services.controller; - -import io.swagger.v3.oas.annotations.tags.Tag; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -/** - *

- * 部门用户关系 前端控制器 - *

- * - * @author Bunny - * @since 2024-10-04 - */ -@Tag(name = "用户和部门", description = "用户和部门相关接口") -@RestController -@RequestMapping("admin/userDept") -public class UserDeptController { - -} diff --git a/service/src/main/java/cn/bunny/services/controller/UserLoginLogController.java b/service/src/main/java/cn/bunny/services/controller/UserLoginLogController.java index f11dddc..0f46f4c 100644 --- a/service/src/main/java/cn/bunny/services/controller/UserLoginLogController.java +++ b/service/src/main/java/cn/bunny/services/controller/UserLoginLogController.java @@ -1,6 +1,5 @@ package cn.bunny.services.controller; -import cn.bunny.dao.dto.log.UserLoginLogAddDto; import cn.bunny.dao.dto.log.UserLoginLogDto; import cn.bunny.dao.dto.log.UserLoginLogUpdateDto; import cn.bunny.dao.entity.log.UserLoginLog; @@ -49,13 +48,6 @@ public class UserLoginLogController { return Mono.just(Result.success(pageResult)); } - @Operation(summary = "添加用户登录日志", description = "添加用户登录日志") - @PostMapping("addUserLoginLog") - public Mono> addUserLoginLog(@Valid @RequestBody UserLoginLogAddDto dto) { - userLoginLogService.addUserLoginLog(dto); - return Mono.just(Result.success(ResultCodeEnum.ADD_SUCCESS)); - } - @Operation(summary = "更新用户登录日志", description = "更新用户登录日志") @PutMapping("updateUserLoginLog") public Mono> updateUserLoginLog(@Valid @RequestBody UserLoginLogUpdateDto dto) { diff --git a/service/src/main/java/cn/bunny/services/factory/UserFactory.java b/service/src/main/java/cn/bunny/services/factory/UserFactory.java index 9e9ad74..44d2a3e 100644 --- a/service/src/main/java/cn/bunny/services/factory/UserFactory.java +++ b/service/src/main/java/cn/bunny/services/factory/UserFactory.java @@ -3,6 +3,7 @@ package cn.bunny.services.factory; import cn.bunny.common.service.utils.JwtHelper; import cn.bunny.common.service.utils.ip.IpUtil; import cn.bunny.common.service.utils.minio.MinioUtil; +import cn.bunny.dao.entity.log.UserLoginLog; import cn.bunny.dao.entity.system.AdminUser; import cn.bunny.dao.entity.system.Power; import cn.bunny.dao.entity.system.Role; @@ -12,14 +13,18 @@ import cn.bunny.dao.pojo.constant.UserConstant; import cn.bunny.dao.vo.system.user.LoginVo; import cn.bunny.services.mapper.PowerMapper; import cn.bunny.services.mapper.RoleMapper; +import cn.bunny.services.mapper.UserLoginLogMapper; import cn.bunny.services.mapper.UserMapper; import cn.bunny.services.security.custom.CustomCheckIsAdmin; +import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; @@ -36,13 +41,18 @@ public class UserFactory { @Autowired private RoleMapper roleMapper; + @Autowired + private UserMapper userMapper; + + @Autowired + private UserLoginLogMapper userLoginLogMapper; + @Autowired private RedisTemplate redisTemplate; @Autowired private MinioUtil minioUtil; - @Autowired - private UserMapper userMapper; + public LoginVo buildUserVo(AdminUser user, long readMeDay) { // 创建token @@ -50,16 +60,21 @@ public class UserFactory { String email = user.getEmail(); String token = JwtHelper.createToken(userId, email, (int) readMeDay); String avatar = user.getAvatar(); - String remoteAddr = IpUtil.getCurrentUserIpAddress().getRemoteAddr(); + + // 获取IP地址 + String ipAddr = IpUtil.getCurrentUserIpAddress().getIpAddr(); String ipRegion = IpUtil.getCurrentUserIpAddress().getIpRegion(); + // 当前请求request + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + // 判断用户是否有头像,如果没有头像设置默认头像 avatar = StringUtils.hasText(avatar) ? minioUtil.getObjectNameFullPath(avatar) : UserConstant.USER_AVATAR; // 设置用户IP地址,并更新用户信息 AdminUser updateUser = new AdminUser(); updateUser.setId(userId); - updateUser.setLastLoginIp(remoteAddr); + updateUser.setLastLoginIp(ipAddr); updateUser.setLastLoginIpAddress(ipRegion); userMapper.updateById(updateUser); @@ -86,13 +101,28 @@ public class UserFactory { loginVo.setAvatar(avatar); loginVo.setToken(token); loginVo.setRefreshToken(token); - loginVo.setLastLoginIp(remoteAddr); + loginVo.setLastLoginIp(ipAddr); loginVo.setLastLoginIpAddress(ipRegion); loginVo.setRoles(roles); loginVo.setPermissions(permissions); loginVo.setUpdateUser(userId); loginVo.setExpires(expires); + // 将用户登录保存在用户登录日志表中 + UserLoginLog userLoginLog = new UserLoginLog(); + BeanUtils.copyProperties(user, userLoginLog); + userLoginLog.setUserId(userId); + userLoginLog.setIpAddress(ipAddr); + userLoginLog.setIpRegion(ipRegion); + userLoginLog.setToken(token); + userLoginLog.setType("login"); + if (requestAttributes != null) { + HttpServletRequest request = requestAttributes.getRequest(); + String userAgent = request.getHeader("User-Agent"); + userLoginLog.setUserAgent(userAgent); + } + userLoginLogMapper.insert(userLoginLog); + // 将信息保存在Redis中 redisTemplate.opsForValue().set(RedisUserConstant.getAdminLoginInfoPrefix(email), loginVo, readMeDay, TimeUnit.DAYS); diff --git a/service/src/main/java/cn/bunny/services/service/UserLoginLogService.java b/service/src/main/java/cn/bunny/services/service/UserLoginLogService.java index 7278774..bfecdfa 100644 --- a/service/src/main/java/cn/bunny/services/service/UserLoginLogService.java +++ b/service/src/main/java/cn/bunny/services/service/UserLoginLogService.java @@ -1,6 +1,5 @@ package cn.bunny.services.service; -import cn.bunny.dao.dto.log.UserLoginLogAddDto; import cn.bunny.dao.dto.log.UserLoginLogDto; import cn.bunny.dao.dto.log.UserLoginLogUpdateDto; import cn.bunny.dao.entity.log.UserLoginLog; @@ -29,13 +28,6 @@ public interface UserLoginLogService extends IService { */ PageResult getUserLoginLogList(Page pageParams, UserLoginLogDto dto); - /** - * * 添加用户登录日志 - * - * @param dto 添加表单 - */ - void addUserLoginLog(@Valid UserLoginLogAddDto dto); - /** * * 更新用户登录日志 * diff --git a/service/src/main/java/cn/bunny/services/service/impl/UserLoginLogServiceImpl.java b/service/src/main/java/cn/bunny/services/service/impl/UserLoginLogServiceImpl.java index c984587..a5f49bb 100644 --- a/service/src/main/java/cn/bunny/services/service/impl/UserLoginLogServiceImpl.java +++ b/service/src/main/java/cn/bunny/services/service/impl/UserLoginLogServiceImpl.java @@ -1,6 +1,5 @@ package cn.bunny.services.service.impl; -import cn.bunny.dao.dto.log.UserLoginLogAddDto; import cn.bunny.dao.dto.log.UserLoginLogDto; import cn.bunny.dao.dto.log.UserLoginLogUpdateDto; import cn.bunny.dao.entity.log.UserLoginLog; @@ -54,19 +53,6 @@ public class UserLoginLogServiceImpl extends ServiceImpl implemen @Autowired private UserRoleMapper userRoleMapper; + @Autowired + private UserLoginLogMapper userLoginLogMapper; + /** * 登录发送邮件验证码 * @@ -204,6 +211,9 @@ public class UserServiceImpl extends ServiceImpl implemen */ @Override public void forcedOffline(Long id) { + // 当前请求request + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + if (id == null) throw new BunnyException(ResultCodeEnum.REQUEST_IS_EMPTY); // 根据id查询用户登录前缀 @@ -211,6 +221,16 @@ public class UserServiceImpl extends ServiceImpl implemen String email = adminUser.getEmail(); String adminLoginInfoPrefix = RedisUserConstant.getAdminLoginInfoPrefix(email); + // 将用户登录保存在用户登录日志表中 + UserLoginLog userLoginLog = new UserLoginLog(); + BeanUtils.copyProperties(adminUser, userLoginLog); + userLoginLog.setUserId(adminUser.getId()); + userLoginLog.setIpAddress(adminUser.getLastLoginIp()); + userLoginLog.setIpRegion(adminUser.getLastLoginIpAddress()); + userLoginLog.setToken(null); + userLoginLog.setType("forcedOffline"); + userLoginLogMapper.insert(userLoginLog); + redisTemplate.delete(adminLoginInfoPrefix); } diff --git a/service/src/main/resources/mapper/UserLoginLogMapper.xml b/service/src/main/resources/mapper/UserLoginLogMapper.xml index 70e6903..e4b452b 100644 --- a/service/src/main/resources/mapper/UserLoginLogMapper.xml +++ b/service/src/main/resources/mapper/UserLoginLogMapper.xml @@ -4,23 +4,23 @@ - - - - - - - - - - - - + + + + + + + + + + + + - id, create_time, update_time, create_user, update_user, is_deleted, user_id, username, token, ip, ip_address, user_agent + id, create_time, update_time, create_user, update_user, is_deleted, user_id, username, token, ip_region, ip_address, user_agent @@ -29,24 +29,24 @@ from log_user_login - - and user_id like CONCAT('%',#{dto.userId},'%') - - - and username like CONCAT('%',#{dto.username},'%') - - - and token like CONCAT('%',#{dto.token},'%') - - - and ip like CONCAT('%',#{dto.ip},'%') - - - and ip_address like CONCAT('%',#{dto.ipAddress},'%') - - - and user_agent like CONCAT('%',#{dto.userAgent},'%') - + + and user_id like CONCAT('%',#{dto.userId},'%') + + + and username like CONCAT('%',#{dto.username},'%') + + + and token like CONCAT('%',#{dto.token},'%') + + + and ip_region like CONCAT('%',#{dto.ipRegion},'%') + + + and ip_address like CONCAT('%',#{dto.ipAddress},'%') + + + and user_agent like CONCAT('%',#{dto.userAgent},'%') + order by update_time desc