瀏覽代碼

update [重大改动] 将 framework 与 system 模块 解耦

疯狂的狮子li 3 年之前
父節點
當前提交
50599487f8
共有 24 個文件被更改,包括 331 次插入149 次删除
  1. 5 0
      ruoyi-admin/pom.xml
  2. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
  3. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
  4. 1 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java
  5. 2 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
  6. 107 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/dto/OperLogDTO.java
  7. 9 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/service/LogininforService.java
  8. 9 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/service/OperLogService.java
  9. 69 0
      ruoyi-common/src/main/java/com/ruoyi/common/core/service/TokenService.java
  10. 1 1
      ruoyi-common/src/main/java/com/ruoyi/common/properties/TokenProperties.java
  11. 1 1
      ruoyi-framework/pom.xml
  12. 8 9
      ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java
  13. 1 1
      ruoyi-framework/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java
  14. 1 1
      ruoyi-framework/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java
  15. 3 3
      ruoyi-framework/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java
  16. 0 97
      ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/AsyncService.java
  17. 1 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/PermissionService.java
  18. 4 4
      ruoyi-system/src/main/java/com/ruoyi/system/service/SysLoginService.java
  19. 5 6
      ruoyi-system/src/main/java/com/ruoyi/system/service/SysPermissionService.java
  20. 3 4
      ruoyi-system/src/main/java/com/ruoyi/system/service/SysRegisterService.java
  21. 64 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java
  22. 21 2
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java
  23. 4 3
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/TokenServiceImpl.java
  24. 9 9
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/UserDetailsServiceImpl.java

+ 5 - 0
ruoyi-admin/pom.xml

@@ -36,6 +36,11 @@
             <artifactId>ruoyi-framework</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-system</artifactId>
+        </dependency>
+
         <!-- 定时任务-->
         <dependency>
             <groupId>com.ruoyi</groupId>

+ 2 - 2
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;

+ 1 - 1
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;

+ 1 - 1
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;

+ 2 - 2
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;

+ 107 - 0
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;
+
+}

+ 9 - 0
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);
+}

+ 9 - 0
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);
+}

+ 69 - 0
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);
+
+}

+ 1 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/config/properties/TokenProperties.java → 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;

+ 1 - 1
ruoyi-framework/pom.xml

@@ -64,7 +64,7 @@
         <!-- 系统模块-->
         <dependency>
             <groupId>com.ruoyi</groupId>
-            <artifactId>ruoyi-system</artifactId>
+            <artifactId>ruoyi-common</artifactId>
         </dependency>
 
     </dependencies>

+ 8 - 9
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))

+ 1 - 1
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;

+ 1 - 1
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;

+ 3 - 3
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;
 
 	/**
 	 * 退出处理

+ 0 - 97
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/AsyncService.java

@@ -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() + "]";
-	}
-}

+ 1 - 1
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/PermissionService.java → 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;

+ 4 - 4
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java → 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;
 
     /**
      * 登录验证

+ 5 - 6
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysPermissionService.java → 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 java.util.HashSet;
-import java.util.Set;
+import com.ruoyi.common.core.domain.entity.SysUser;
 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;
+
+import java.util.HashSet;
+import java.util.Set;
 
 /**
  * 用户权限处理

+ 3 - 4
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysRegisterService.java → 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;
 
     /**
      * 注册

+ 64 - 1
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<SysLogininforMapper, SysLogininfor, SysLogininfor> implements ISysLogininforService {
+public class SysLogininforServiceImpl extends ServicePlusImpl<SysLogininforMapper, SysLogininfor, SysLogininfor> 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<SysLogininfor> selectPageLogininforList(SysLogininfor logininfor) {

+ 21 - 2
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<SysOperLogMapper, SysOperLog, SysOperLog> implements ISysOperLogService {
+public class SysOperLogServiceImpl extends ServicePlusImpl<SysOperLogMapper, SysOperLog, SysOperLog> 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<SysOperLog> selectPageOperLogList(SysOperLog operLog) {

+ 4 - 3
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java → 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;
 

+ 9 - 9
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/UserDetailsServiceImpl.java → 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;