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;