From 50599487f894ed3bf0297a2906f172e91f3ffba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Fri, 17 Sep 2021 14:48:36 +0800 Subject: [PATCH] =?UTF-8?q?update=20[=E9=87=8D=E5=A4=A7=E6=94=B9=E5=8A=A8]?= =?UTF-8?q?=20=E5=B0=86=20framework=20=E4=B8=8E=20system=20=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=20=E8=A7=A3=E8=80=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ruoyi-admin/pom.xml | 5 + .../controller/system/SysLoginController.java | 4 +- .../system/SysProfileController.java | 2 +- .../system/SysRegisterController.java | 2 +- .../controller/system/SysRoleController.java | 4 +- .../common/core/domain/dto/OperLogDTO.java | 107 ++++++++++++++++++ .../core/service/LogininforService.java | 9 ++ .../common/core/service/OperLogService.java | 9 ++ .../common/core/service/TokenService.java | 69 +++++++++++ .../common}/properties/TokenProperties.java | 2 +- ruoyi-framework/pom.xml | 2 +- .../ruoyi/framework/aspectj/LogAspect.java | 17 ++- .../impl/SameUrlDataInterceptor.java | 2 +- .../filter/JwtAuthenticationTokenFilter.java | 2 +- .../handle/LogoutSuccessHandlerImpl.java | 6 +- .../framework/web/service/AsyncService.java | 97 ---------------- .../system}/service/PermissionService.java | 2 +- .../system}/service/SysLoginService.java | 8 +- .../system}/service/SysPermissionService.java | 11 +- .../system}/service/SysRegisterService.java | 7 +- .../impl/SysLogininforServiceImpl.java | 65 ++++++++++- .../service/impl/SysOperLogServiceImpl.java | 23 +++- .../system/service/impl/TokenServiceImpl.java | 7 +- .../service/impl}/UserDetailsServiceImpl.java | 18 +-- 24 files changed, 331 insertions(+), 149 deletions(-) create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/service/LogininforService.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/service/OperLogService.java create mode 100644 ruoyi-common/src/main/java/com/ruoyi/common/core/service/TokenService.java rename {ruoyi-framework/src/main/java/com/ruoyi/framework/config => ruoyi-common/src/main/java/com/ruoyi/common}/properties/TokenProperties.java (91%) delete mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/AsyncService.java rename {ruoyi-framework/src/main/java/com/ruoyi/framework/web => ruoyi-system/src/main/java/com/ruoyi/system}/service/PermissionService.java (99%) rename {ruoyi-framework/src/main/java/com/ruoyi/framework/web => ruoyi-system/src/main/java/com/ruoyi/system}/service/SysLoginService.java (95%) rename {ruoyi-framework/src/main/java/com/ruoyi/framework/web => ruoyi-system/src/main/java/com/ruoyi/system}/service/SysPermissionService.java (91%) rename {ruoyi-framework/src/main/java/com/ruoyi/framework/web => ruoyi-system/src/main/java/com/ruoyi/system}/service/SysRegisterService.java (94%) rename ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java => ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TokenServiceImpl.java (96%) rename {ruoyi-framework/src/main/java/com/ruoyi/framework/web/service => ruoyi-system/src/main/java/com/ruoyi/system/service/impl}/UserDetailsServiceImpl.java (91%) diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml index f3d9ca974..37cc33b11 100644 --- a/ruoyi-admin/pom.xml +++ b/ruoyi-admin/pom.xml @@ -36,6 +36,11 @@ ruoyi-framework + + com.ruoyi + ruoyi-system + + com.ruoyi diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index 76141b9b7..287d4c587 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -6,8 +6,8 @@ import com.ruoyi.common.core.domain.entity.SysMenu; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginBody; import com.ruoyi.common.utils.SecurityUtils; -import com.ruoyi.framework.web.service.SysLoginService; -import com.ruoyi.framework.web.service.SysPermissionService; +import com.ruoyi.system.service.SysLoginService; +import com.ruoyi.system.service.SysPermissionService; import com.ruoyi.system.service.ISysMenuService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java index 422355da0..66dfd0791 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java @@ -7,9 +7,9 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.core.service.TokenService; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.domain.SysOss; import com.ruoyi.system.service.ISysOssService; import com.ruoyi.system.service.ISysUserService; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java index 4c2cc7c66..64904a0cc 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java @@ -4,7 +4,7 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.model.RegisterBody; import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.framework.web.service.SysRegisterService; +import com.ruoyi.system.service.SysRegisterService; import com.ruoyi.system.service.ISysConfigService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java index b1cd26380..e5f40326c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java @@ -9,13 +9,13 @@ import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.core.service.TokenService; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.poi.ExcelUtil; -import com.ruoyi.framework.web.service.SysPermissionService; -import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.domain.SysUserRole; import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.service.SysPermissionService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java new file mode 100644 index 000000000..f5132efe6 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java @@ -0,0 +1,107 @@ +package com.ruoyi.common.core.domain.dto; + +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.Date; + +/** + * 操作日志记录表 oper_log + * + * @author ruoyi + */ + +@Data +@NoArgsConstructor +@Accessors(chain = true) +public class OperLogDTO implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 日志主键 + */ + private Long operId; + + /** + * 操作模块 + */ + private String title; + + /** + * 业务类型(0其它 1新增 2修改 3删除) + */ + private Integer businessType; + + /** + * 业务类型数组 + */ + private Integer[] businessTypes; + + /** + * 请求方法 + */ + private String method; + + /** + * 请求方式 + */ + private String requestMethod; + + /** + * 操作类别(0其它 1后台用户 2手机端用户) + */ + private Integer operatorType; + + /** + * 操作人员 + */ + private String operName; + + /** + * 部门名称 + */ + private String deptName; + + /** + * 请求url + */ + private String operUrl; + + /** + * 操作地址 + */ + private String operIp; + + /** + * 操作地点 + */ + private String operLocation; + + /** + * 请求参数 + */ + private String operParam; + + /** + * 返回参数 + */ + private String jsonResult; + + /** + * 操作状态(0正常 1异常) + */ + private Integer status; + + /** + * 错误消息 + */ + private String errorMsg; + + /** + * 操作时间 + */ + private Date operTime; + +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/LogininforService.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/LogininforService.java new file mode 100644 index 000000000..1bf34d526 --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/LogininforService.java @@ -0,0 +1,9 @@ +package com.ruoyi.common.core.service; + +import javax.servlet.http.HttpServletRequest; + +public interface LogininforService { + + void recordLogininfor(String username, String status, String message, + HttpServletRequest request, Object... args); +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/OperLogService.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/OperLogService.java new file mode 100644 index 000000000..71e5647ee --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/OperLogService.java @@ -0,0 +1,9 @@ +package com.ruoyi.common.core.service; + +import com.ruoyi.common.core.domain.dto.OperLogDTO; +import org.springframework.scheduling.annotation.Async; + +public interface OperLogService { + @Async + void recordOper(OperLogDTO operLogDTO); +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/service/TokenService.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/TokenService.java new file mode 100644 index 000000000..d9a9f0acf --- /dev/null +++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/service/TokenService.java @@ -0,0 +1,69 @@ +package com.ruoyi.common.core.service; + +import com.ruoyi.common.core.domain.model.LoginUser; + +import javax.servlet.http.HttpServletRequest; + +/** + * token验证处理 + * + * @author Lion Li + */ +public interface TokenService { + + /** + * 获取用户身份信息 + * + * @return 用户信息 + */ + LoginUser getLoginUser(HttpServletRequest request); + + /** + * 设置用户身份信息 + */ + void setLoginUser(LoginUser loginUser); + + /** + * 删除用户身份信息 + */ + void delLoginUser(String token); + + /** + * 创建令牌 + * + * @param loginUser 用户信息 + * @return 令牌 + */ + String createToken(LoginUser loginUser); + + /** + * 验证令牌有效期,相差不足20分钟,自动刷新缓存 + * + * @param loginUser + * @return 令牌 + */ + void verifyToken(LoginUser loginUser); + + /** + * 刷新令牌有效期 + * + * @param loginUser 登录信息 + */ + void refreshToken(LoginUser loginUser); + + /** + * 设置用户代理信息 + * + * @param loginUser 登录信息 + */ + void setUserAgent(LoginUser loginUser); + + /** + * 从令牌中获取用户名 + * + * @param token 令牌 + * @return 用户名 + */ + String getUsernameFromToken(String token); + +} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/TokenProperties.java b/ruoyi-common/src/main/java/com/ruoyi/common/properties/TokenProperties.java similarity index 91% rename from ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/TokenProperties.java rename to ruoyi-common/src/main/java/com/ruoyi/common/properties/TokenProperties.java index f695c1c62..927a9413d 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/TokenProperties.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/properties/TokenProperties.java @@ -1,4 +1,4 @@ -package com.ruoyi.framework.config.properties; +package com.ruoyi.common.properties; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml index 680e6ec5f..0a147a8da 100644 --- a/ruoyi-framework/pom.xml +++ b/ruoyi-framework/pom.xml @@ -64,7 +64,7 @@ com.ruoyi - ruoyi-system + ruoyi-common diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java index 78a7b3a3b..246e428d5 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java @@ -4,13 +4,14 @@ import com.ruoyi.common.annotation.Log; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.enums.BusinessStatus; import com.ruoyi.common.enums.HttpMethod; +import com.ruoyi.common.core.service.OperLogService; +import com.ruoyi.common.core.domain.dto.OperLogDTO; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.spring.SpringUtils; -import com.ruoyi.framework.web.service.AsyncService; -import com.ruoyi.system.domain.SysOperLog; +import lombok.extern.slf4j.Slf4j; import org.aspectj.lang.JoinPoint; import org.aspectj.lang.Signature; import org.aspectj.lang.annotation.AfterReturning; @@ -18,8 +19,6 @@ import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.aspectj.lang.reflect.MethodSignature; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.validation.BindingResult; import org.springframework.web.multipart.MultipartFile; @@ -36,11 +35,11 @@ import java.util.Map; * * @author ruoyi */ +@Slf4j @Aspect @Component public class LogAspect { - private static final Logger log = LoggerFactory.getLogger(LogAspect.class); // 配置织入点 @Pointcut("@annotation(com.ruoyi.common.annotation.Log)") @@ -86,7 +85,7 @@ public class LogAspect LoginUser loginUser = SecurityUtils.getLoginUser(); // *========数据库日志=========*// - SysOperLog operLog = new SysOperLog(); + OperLogDTO operLog = new OperLogDTO(); operLog.setStatus(BusinessStatus.SUCCESS.ordinal()); // 请求的地址 String ip = ServletUtils.getClientIP(); @@ -111,7 +110,7 @@ public class LogAspect // 处理设置注解上的参数 getControllerMethodDescription(joinPoint, controllerLog, operLog, jsonResult); // 保存数据库 - SpringUtils.getBean(AsyncService.class).recordOper(operLog); + SpringUtils.getBean(OperLogService.class).recordOper(operLog); } catch (Exception exp) { @@ -129,7 +128,7 @@ public class LogAspect * @param operLog 操作日志 * @throws Exception */ - public void getControllerMethodDescription(JoinPoint joinPoint, Log log, SysOperLog operLog, Object jsonResult) throws Exception + public void getControllerMethodDescription(JoinPoint joinPoint, Log log, OperLogDTO operLog, Object jsonResult) throws Exception { // 设置action动作 operLog.setBusinessType(log.businessType().ordinal()); @@ -156,7 +155,7 @@ public class LogAspect * @param operLog 操作日志 * @throws Exception 异常 */ - private void setRequestValue(JoinPoint joinPoint, SysOperLog operLog) throws Exception + private void setRequestValue(JoinPoint joinPoint, OperLogDTO operLog) throws Exception { String requestMethod = operLog.getRequestMethod(); if (HttpMethod.PUT.name().equals(requestMethod) || HttpMethod.POST.name().equals(requestMethod)) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java index b2256c935..47b7fbb69 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java @@ -9,7 +9,7 @@ import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.config.properties.RepeatSubmitProperties; -import com.ruoyi.framework.config.properties.TokenProperties; +import com.ruoyi.common.properties.TokenProperties; import com.ruoyi.framework.interceptor.RepeatSubmitInterceptor; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java index 188e24fdb..5439a979b 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java @@ -1,9 +1,9 @@ package com.ruoyi.framework.security.filter; import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.service.TokenService; import com.ruoyi.common.utils.SecurityUtils; import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.framework.web.service.TokenService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContextHolder; diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java index 371a66121..857cbe376 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java @@ -4,11 +4,11 @@ import cn.hutool.http.HttpStatus; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.service.LogininforService; +import com.ruoyi.common.core.service.TokenService; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.framework.web.service.AsyncService; -import com.ruoyi.framework.web.service.TokenService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.security.core.Authentication; @@ -31,7 +31,7 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler { private TokenService tokenService; @Autowired - private AsyncService asyncService; + private LogininforService asyncService; /** * 退出处理 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/AsyncService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/AsyncService.java deleted file mode 100644 index 3199cdd3d..000000000 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/AsyncService.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.ruoyi.framework.web.service; - -import com.ruoyi.common.utils.StringUtils; -import cn.hutool.http.useragent.UserAgent; -import cn.hutool.http.useragent.UserAgentUtil; -import com.ruoyi.common.constant.Constants; -import com.ruoyi.common.utils.ServletUtils; -import com.ruoyi.common.utils.ip.AddressUtils; -import com.ruoyi.system.domain.SysLogininfor; -import com.ruoyi.system.domain.SysOperLog; -import com.ruoyi.system.service.ISysLogininforService; -import com.ruoyi.system.service.ISysOperLogService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; - -import javax.servlet.http.HttpServletRequest; - -/** - * 异步工厂(产生任务用) - * - * @author Lion Li - */ -@Slf4j(topic = "sys-user") -@Async -@Component -public class AsyncService { - - @Autowired - private ISysLogininforService iSysLogininforService; - - @Autowired - private ISysOperLogService iSysOperLogService; - - /** - * 记录登录信息 - * - * @param username 用户名 - * @param status 状态 - * @param message 消息 - * @param args 列表 - */ - public void recordLogininfor(final String username, final String status, final String message, - HttpServletRequest request, final Object... args) { - final UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent")); - final String ip = ServletUtils.getClientIP(request); - - String address = AddressUtils.getRealAddressByIP(ip); - StringBuilder s = new StringBuilder(); - s.append(getBlock(ip)); - s.append(address); - s.append(getBlock(username)); - s.append(getBlock(status)); - s.append(getBlock(message)); - // 打印信息到日志 - log.info(s.toString(), args); - // 获取客户端操作系统 - String os = userAgent.getOs().getName(); - // 获取客户端浏览器 - String browser = userAgent.getBrowser().getName(); - // 封装对象 - SysLogininfor logininfor = new SysLogininfor(); - logininfor.setUserName(username); - 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)) { - logininfor.setStatus(Constants.SUCCESS); - } else if (Constants.LOGIN_FAIL.equals(status)) { - logininfor.setStatus(Constants.FAIL); - } - // 插入数据 - iSysLogininforService.insertLogininfor(logininfor); - } - - /** - * 操作日志记录 - * - * @param operLog 操作日志信息 - */ - public void recordOper(final SysOperLog operLog) { - // 远程查询操作地点 - operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); - iSysOperLogService.insertOperlog(operLog); - } - - private String getBlock(Object msg) { - if (msg == null) { - msg = ""; - } - return "[" + msg.toString() + "]"; - } -} diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/PermissionService.java similarity index 99% rename from ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java rename to ruoyi-system/src/main/java/com/ruoyi/system/service/PermissionService.java index 080177f80..fe735b0c7 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/PermissionService.java @@ -1,4 +1,4 @@ -package com.ruoyi.framework.web.service; +package com.ruoyi.system.service; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.model.LoginUser; diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java similarity index 95% rename from ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java rename to ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java index 7df8c26d5..886537f63 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java @@ -1,8 +1,10 @@ -package com.ruoyi.framework.web.service; +package com.ruoyi.system.service; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.service.LogininforService; +import com.ruoyi.common.core.service.TokenService; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.user.CaptchaException; import com.ruoyi.common.exception.user.CaptchaExpireException; @@ -11,8 +13,6 @@ import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.MessageUtils; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.ServletUtils; -import com.ruoyi.system.service.ISysConfigService; -import com.ruoyi.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; @@ -44,7 +44,7 @@ public class SysLoginService private ISysConfigService configService; @Autowired - private AsyncService asyncService; + private LogininforService asyncService; /** * 登录验证 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java similarity index 91% rename from ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java rename to ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java index feb803875..d8c657b5b 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java @@ -1,12 +1,11 @@ -package com.ruoyi.framework.web.service; +package com.ruoyi.system.service; + +import com.ruoyi.common.core.domain.entity.SysUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import java.util.HashSet; import java.util.Set; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import com.ruoyi.common.core.domain.entity.SysUser; -import com.ruoyi.system.service.ISysMenuService; -import com.ruoyi.system.service.ISysRoleService; /** * 用户权限处理 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java similarity index 94% rename from ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java rename to ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java index 149392f21..8171cb079 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java @@ -1,14 +1,13 @@ -package com.ruoyi.framework.web.service; +package com.ruoyi.system.service; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.constant.UserConstants; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.RegisterBody; +import com.ruoyi.common.core.service.LogininforService; import com.ruoyi.common.exception.user.CaptchaException; import com.ruoyi.common.exception.user.CaptchaExpireException; import com.ruoyi.common.utils.*; -import com.ruoyi.system.service.ISysConfigService; -import com.ruoyi.system.service.ISysUserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -27,7 +26,7 @@ public class SysRegisterService private ISysConfigService configService; @Autowired - private AsyncService asyncService; + private LogininforService asyncService; /** * 注册 diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java index 8b5661928..ede22718d 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java @@ -1,15 +1,24 @@ package com.ruoyi.system.service.impl; +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.service.LogininforService; import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.AddressUtils; import com.ruoyi.system.domain.SysLogininfor; import com.ruoyi.system.mapper.SysLogininforMapper; import com.ruoyi.system.service.ISysLogininforService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletRequest; import java.util.Arrays; import java.util.Date; import java.util.List; @@ -20,8 +29,62 @@ import java.util.Map; * * @author ruoyi */ +@Slf4j @Service -public class SysLogininforServiceImpl extends ServicePlusImpl implements ISysLogininforService { +public class SysLogininforServiceImpl extends ServicePlusImpl implements ISysLogininforService, LogininforService { + + /** + * 记录登录信息 + * + * @param username 用户名 + * @param status 状态 + * @param message 消息 + * @param args 列表 + */ + @Async + @Override + public void recordLogininfor(final String username, final String status, final String message, + HttpServletRequest request, final Object... args) { + final UserAgent userAgent = UserAgentUtil.parse(request.getHeader("User-Agent")); + final String ip = ServletUtils.getClientIP(request); + + String address = AddressUtils.getRealAddressByIP(ip); + StringBuilder s = new StringBuilder(); + s.append(getBlock(ip)); + s.append(address); + s.append(getBlock(username)); + s.append(getBlock(status)); + s.append(getBlock(message)); + // 打印信息到日志 + log.info(s.toString(), args); + // 获取客户端操作系统 + String os = userAgent.getOs().getName(); + // 获取客户端浏览器 + String browser = userAgent.getBrowser().getName(); + // 封装对象 + SysLogininfor logininfor = new SysLogininfor(); + logininfor.setUserName(username); + 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)) { + logininfor.setStatus(Constants.SUCCESS); + } else if (Constants.LOGIN_FAIL.equals(status)) { + logininfor.setStatus(Constants.FAIL); + } + // 插入数据 + insertLogininfor(logininfor); + } + + private String getBlock(Object msg) { + if (msg == null) { + msg = ""; + } + return "[" + msg.toString() + "]"; + } @Override public TableDataInfo selectPageLogininforList(SysLogininfor logininfor) { diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java index ff518bdbf..f4c39f4a4 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java @@ -1,14 +1,19 @@ package com.ruoyi.system.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ArrayUtil; -import com.ruoyi.common.utils.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.service.OperLogService; +import com.ruoyi.common.core.domain.dto.OperLogDTO; import com.ruoyi.common.utils.PageUtils; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.ip.AddressUtils; import com.ruoyi.system.domain.SysOperLog; import com.ruoyi.system.mapper.SysOperLogMapper; import com.ruoyi.system.service.ISysOperLogService; +import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import java.util.Arrays; @@ -22,7 +27,21 @@ import java.util.Map; * @author ruoyi */ @Service -public class SysOperLogServiceImpl extends ServicePlusImpl implements ISysOperLogService { +public class SysOperLogServiceImpl extends ServicePlusImpl implements ISysOperLogService, OperLogService { + + /** + * 操作日志记录 + * + * @param operLogDTO 操作日志信息 + */ + @Async + @Override + public void recordOper(final OperLogDTO operLogDTO) { + SysOperLog operLog = BeanUtil.toBean(operLogDTO, SysOperLog.class); + // 远程查询操作地点 + operLog.setOperLocation(AddressUtils.getRealAddressByIP(operLog.getOperIp())); + insertOperlog(operLog); + } @Override public TableDataInfo selectPageOperLogList(SysOperLog operLog) { diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TokenServiceImpl.java similarity index 96% rename from ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TokenServiceImpl.java index cb8878e86..ae95660ab 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TokenServiceImpl.java @@ -1,15 +1,16 @@ -package com.ruoyi.framework.web.service; +package com.ruoyi.system.service.impl; import cn.hutool.core.util.IdUtil; import cn.hutool.http.useragent.UserAgent; import cn.hutool.http.useragent.UserAgentUtil; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.core.service.TokenService; +import com.ruoyi.common.properties.TokenProperties; import com.ruoyi.common.utils.RedisUtils; import com.ruoyi.common.utils.ServletUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.ip.AddressUtils; -import com.ruoyi.framework.config.properties.TokenProperties; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; @@ -27,7 +28,7 @@ import java.util.concurrent.TimeUnit; * @author Lion Li */ @Component -public class TokenService { +public class TokenServiceImpl implements TokenService { protected static final long MILLIS_SECOND = 1000; diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserDetailsServiceImpl.java similarity index 91% rename from ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java rename to ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserDetailsServiceImpl.java index c8b1c7b41..5d104f681 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserDetailsServiceImpl.java @@ -1,28 +1,28 @@ -package com.ruoyi.framework.web.service; +package com.ruoyi.system.service.impl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.core.userdetails.UserDetailsService; -import org.springframework.security.core.userdetails.UsernameNotFoundException; -import org.springframework.stereotype.Service; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.enums.UserStatus; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.service.ISysUserService; +import com.ruoyi.system.service.SysPermissionService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UserDetailsService; +import org.springframework.security.core.userdetails.UsernameNotFoundException; +import org.springframework.stereotype.Service; /** * 用户验证处理 * * @author ruoyi */ +@Slf4j @Service public class UserDetailsServiceImpl implements UserDetailsService { - private static final Logger log = LoggerFactory.getLogger(UserDetailsServiceImpl.class); @Autowired private ISysUserService userService;