commit b8d9a10ced49a19b285c32312d06637050496002
Author: wxy <14293288+zysysys@user.noreply.gitee.com>
Date: Fri May 24 12:10:16 2024 +0800
更新
diff --git a/jing-auth/pom.xml b/jing-auth/pom.xml
new file mode 100644
index 0000000..80c5259
--- /dev/null
+++ b/jing-auth/pom.xml
@@ -0,0 +1,74 @@
+
+
+ com.jing
+ jing
+ 3.6.4
+
+ 4.0.0
+
+ jing-auth
+
+
+ jing-auth认证授权中心
+
+
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-config
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+ com.jing
+ jing-common-security
+
+
+
+
+
+ ${project.artifactId}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ repackage
+
+
+
+
+
+
+
+
diff --git a/jing-auth/src/main/java/com/jing/RuoYiAuthApplication.java b/jing-auth/src/main/java/com/jing/RuoYiAuthApplication.java
new file mode 100644
index 0000000..2c002f5
--- /dev/null
+++ b/jing-auth/src/main/java/com/jing/RuoYiAuthApplication.java
@@ -0,0 +1,31 @@
+package com.jing;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import com.jing.common.security.annotation.EnableRyFeignClients;
+
+/**
+ * 认证授权中心
+ *
+ * @author ruoyi
+ */
+@EnableRyFeignClients
+@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
+public class RuoYiAuthApplication
+{
+ public static void main(String[] args)
+ {
+ SpringApplication.run(RuoYiAuthApplication.class, args);
+ System.out.println("(♥◠‿◠)ノ゙ 认证授权中心启动成功 ლ(´ڡ`ლ)゙ \n" +
+ " .-------. ____ __ \n" +
+ " | _ _ \\ \\ \\ / / \n" +
+ " | ( ' ) | \\ _. / ' \n" +
+ " |(_ o _) / _( )_ .' \n" +
+ " | (_,_).' __ ___(_ o _)' \n" +
+ " | |\\ \\ | || |(_,_)' \n" +
+ " | | \\ `' /| `-' / \n" +
+ " | | \\ / \\ / \n" +
+ " ''-' `'-' `-..-' ");
+ }
+}
diff --git a/jing-auth/src/main/java/com/jing/auth/controller/TokenController.java b/jing-auth/src/main/java/com/jing/auth/controller/TokenController.java
new file mode 100644
index 0000000..15e557c
--- /dev/null
+++ b/jing-auth/src/main/java/com/jing/auth/controller/TokenController.java
@@ -0,0 +1,78 @@
+package com.jing.auth.controller;
+
+import javax.servlet.http.HttpServletRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import com.jing.auth.form.LoginBody;
+import com.jing.auth.form.RegisterBody;
+import com.jing.auth.service.SysLoginService;
+import com.jing.common.core.domain.R;
+import com.jing.common.core.utils.JwtUtils;
+import com.jing.common.core.utils.StringUtils;
+import com.jing.common.security.auth.AuthUtil;
+import com.jing.common.security.service.TokenService;
+import com.jing.common.security.utils.SecurityUtils;
+import com.jing.system.api.model.LoginUser;
+
+/**
+ * token 控制
+ *
+ * @author ruoyi
+ */
+@RestController
+public class TokenController
+{
+ @Autowired
+ private TokenService tokenService;
+
+ @Autowired
+ private SysLoginService sysLoginService;
+
+ @PostMapping("login")
+ public R> login(@RequestBody LoginBody form)
+ {
+ // 用户登录
+ LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
+ // 获取登录token
+ return R.ok(tokenService.createToken(userInfo));
+ }
+
+ @DeleteMapping("logout")
+ public R> logout(HttpServletRequest request)
+ {
+ String token = SecurityUtils.getToken(request);
+ if (StringUtils.isNotEmpty(token))
+ {
+ String username = JwtUtils.getUserName(token);
+ // 删除用户缓存记录
+ AuthUtil.logoutByToken(token);
+ // 记录用户退出日志
+ sysLoginService.logout(username);
+ }
+ return R.ok();
+ }
+
+ @PostMapping("refresh")
+ public R> refresh(HttpServletRequest request)
+ {
+ LoginUser loginUser = tokenService.getLoginUser(request);
+ if (StringUtils.isNotNull(loginUser))
+ {
+ // 刷新令牌有效期
+ tokenService.refreshToken(loginUser);
+ return R.ok();
+ }
+ return R.ok();
+ }
+
+ @PostMapping("register")
+ public R> register(@RequestBody RegisterBody registerBody)
+ {
+ // 用户注册
+ sysLoginService.register(registerBody.getUsername(), registerBody.getPassword());
+ return R.ok();
+ }
+}
diff --git a/jing-auth/src/main/java/com/jing/auth/form/LoginBody.java b/jing-auth/src/main/java/com/jing/auth/form/LoginBody.java
new file mode 100644
index 0000000..04cc00b
--- /dev/null
+++ b/jing-auth/src/main/java/com/jing/auth/form/LoginBody.java
@@ -0,0 +1,39 @@
+package com.jing.auth.form;
+
+/**
+ * 用户登录对象
+ *
+ * @author ruoyi
+ */
+public class LoginBody
+{
+ /**
+ * 用户名
+ */
+ private String username;
+
+ /**
+ * 用户密码
+ */
+ private String password;
+
+ public String getUsername()
+ {
+ return username;
+ }
+
+ public void setUsername(String username)
+ {
+ this.username = username;
+ }
+
+ public String getPassword()
+ {
+ return password;
+ }
+
+ public void setPassword(String password)
+ {
+ this.password = password;
+ }
+}
diff --git a/jing-auth/src/main/java/com/jing/auth/form/RegisterBody.java b/jing-auth/src/main/java/com/jing/auth/form/RegisterBody.java
new file mode 100644
index 0000000..0dfdf63
--- /dev/null
+++ b/jing-auth/src/main/java/com/jing/auth/form/RegisterBody.java
@@ -0,0 +1,11 @@
+package com.jing.auth.form;
+
+/**
+ * 用户注册对象
+ *
+ * @author ruoyi
+ */
+public class RegisterBody extends LoginBody
+{
+
+}
diff --git a/jing-auth/src/main/java/com/jing/auth/service/SysLoginService.java b/jing-auth/src/main/java/com/jing/auth/service/SysLoginService.java
new file mode 100644
index 0000000..b98f054
--- /dev/null
+++ b/jing-auth/src/main/java/com/jing/auth/service/SysLoginService.java
@@ -0,0 +1,143 @@
+package com.jing.auth.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import com.jing.common.core.constant.CacheConstants;
+import com.jing.common.core.constant.Constants;
+import com.jing.common.core.constant.SecurityConstants;
+import com.jing.common.core.constant.UserConstants;
+import com.jing.common.core.domain.R;
+import com.jing.common.core.enums.UserStatus;
+import com.jing.common.core.exception.ServiceException;
+import com.jing.common.core.text.Convert;
+import com.jing.common.core.utils.StringUtils;
+import com.jing.common.core.utils.ip.IpUtils;
+import com.jing.common.redis.service.RedisService;
+import com.jing.common.security.utils.SecurityUtils;
+import com.jing.system.api.RemoteUserService;
+import com.jing.system.api.domain.SysUser;
+import com.jing.system.api.model.LoginUser;
+
+/**
+ * 登录校验方法
+ *
+ * @author ruoyi
+ */
+@Component
+public class SysLoginService
+{
+ @Autowired
+ private RemoteUserService remoteUserService;
+
+ @Autowired
+ private SysPasswordService passwordService;
+
+ @Autowired
+ private SysRecordLogService recordLogService;
+
+ @Autowired
+ private RedisService redisService;
+
+ /**
+ * 登录
+ */
+ public LoginUser login(String username, String password)
+ {
+ // 用户名或密码为空 错误
+ if (StringUtils.isAnyBlank(username, password))
+ {
+ recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写");
+ throw new ServiceException("用户/密码必须填写");
+ }
+ // 密码如果不在指定范围内 错误
+ if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
+ || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
+ {
+ recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户密码不在指定范围");
+ throw new ServiceException("用户密码不在指定范围");
+ }
+ // 用户名不在指定范围内 错误
+ if (username.length() < UserConstants.USERNAME_MIN_LENGTH
+ || username.length() > UserConstants.USERNAME_MAX_LENGTH)
+ {
+ recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户名不在指定范围");
+ throw new ServiceException("用户名不在指定范围");
+ }
+ // IP黑名单校验
+ String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST));
+ if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr()))
+ {
+ recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾,访问IP已被列入系统黑名单");
+ throw new ServiceException("很遗憾,访问IP已被列入系统黑名单");
+ }
+ // 查询用户信息
+ R userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
+
+ if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
+ {
+ recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
+ throw new ServiceException("登录用户:" + username + " 不存在");
+ }
+
+ if (R.FAIL == userResult.getCode())
+ {
+ throw new ServiceException(userResult.getMsg());
+ }
+
+ LoginUser userInfo = userResult.getData();
+ SysUser user = userResult.getData().getSysUser();
+ if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
+ {
+ recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
+ throw new ServiceException("对不起,您的账号:" + username + " 已被删除");
+ }
+ if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
+ {
+ recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
+ throw new ServiceException("对不起,您的账号:" + username + " 已停用");
+ }
+ passwordService.validate(user, password);
+ recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");
+ return userInfo;
+ }
+
+ public void logout(String loginName)
+ {
+ recordLogService.recordLogininfor(loginName, Constants.LOGOUT, "退出成功");
+ }
+
+ /**
+ * 注册
+ */
+ public void register(String username, String password)
+ {
+ // 用户名或密码为空 错误
+ if (StringUtils.isAnyBlank(username, password))
+ {
+ throw new ServiceException("用户/密码必须填写");
+ }
+ if (username.length() < UserConstants.USERNAME_MIN_LENGTH
+ || username.length() > UserConstants.USERNAME_MAX_LENGTH)
+ {
+ throw new ServiceException("账户长度必须在2到20个字符之间");
+ }
+ if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
+ || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
+ {
+ throw new ServiceException("密码长度必须在5到20个字符之间");
+ }
+
+ // 注册用户信息
+ SysUser sysUser = new SysUser();
+ sysUser.setUserName(username);
+ sysUser.setNickName(username);
+ sysUser.setPassword(SecurityUtils.encryptPassword(password));
+ R> registerResult = remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER);
+
+ if (R.FAIL == registerResult.getCode())
+ {
+ throw new ServiceException(registerResult.getMsg());
+ }
+ recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功");
+ }
+}
diff --git a/jing-auth/src/main/java/com/jing/auth/service/SysPasswordService.java b/jing-auth/src/main/java/com/jing/auth/service/SysPasswordService.java
new file mode 100644
index 0000000..9a31d58
--- /dev/null
+++ b/jing-auth/src/main/java/com/jing/auth/service/SysPasswordService.java
@@ -0,0 +1,85 @@
+package com.jing.auth.service;
+
+import java.util.concurrent.TimeUnit;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import com.jing.common.core.constant.CacheConstants;
+import com.jing.common.core.constant.Constants;
+import com.jing.common.core.exception.ServiceException;
+import com.jing.common.redis.service.RedisService;
+import com.jing.common.security.utils.SecurityUtils;
+import com.jing.system.api.domain.SysUser;
+
+/**
+ * 登录密码方法
+ *
+ * @author ruoyi
+ */
+@Component
+public class SysPasswordService
+{
+ @Autowired
+ private RedisService redisService;
+
+ private int maxRetryCount = CacheConstants.PASSWORD_MAX_RETRY_COUNT;
+
+ private Long lockTime = CacheConstants.PASSWORD_LOCK_TIME;
+
+ @Autowired
+ private SysRecordLogService recordLogService;
+
+ /**
+ * 登录账户密码错误次数缓存键名
+ *
+ * @param username 用户名
+ * @return 缓存键key
+ */
+ private String getCacheKey(String username)
+ {
+ return CacheConstants.PWD_ERR_CNT_KEY + username;
+ }
+
+ public void validate(SysUser user, String password)
+ {
+ String username = user.getUserName();
+
+ Integer retryCount = redisService.getCacheObject(getCacheKey(username));
+
+ if (retryCount == null)
+ {
+ retryCount = 0;
+ }
+
+ if (retryCount >= Integer.valueOf(maxRetryCount).intValue())
+ {
+ String errMsg = String.format("密码输入错误%s次,帐户锁定%s分钟", maxRetryCount, lockTime);
+ recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL,errMsg);
+ throw new ServiceException(errMsg);
+ }
+
+ if (!matches(user, password))
+ {
+ retryCount = retryCount + 1;
+ recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, String.format("密码输入错误%s次", retryCount));
+ redisService.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES);
+ throw new ServiceException("用户不存在/密码错误");
+ }
+ else
+ {
+ clearLoginRecordCache(username);
+ }
+ }
+
+ public boolean matches(SysUser user, String rawPassword)
+ {
+ return SecurityUtils.matchesPassword(rawPassword, user.getPassword());
+ }
+
+ public void clearLoginRecordCache(String loginName)
+ {
+ if (redisService.hasKey(getCacheKey(loginName)))
+ {
+ redisService.deleteObject(getCacheKey(loginName));
+ }
+ }
+}
diff --git a/jing-auth/src/main/java/com/jing/auth/service/SysRecordLogService.java b/jing-auth/src/main/java/com/jing/auth/service/SysRecordLogService.java
new file mode 100644
index 0000000..7a8c7bc
--- /dev/null
+++ b/jing-auth/src/main/java/com/jing/auth/service/SysRecordLogService.java
@@ -0,0 +1,48 @@
+package com.jing.auth.service;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import com.jing.common.core.constant.Constants;
+import com.jing.common.core.constant.SecurityConstants;
+import com.jing.common.core.utils.StringUtils;
+import com.jing.common.core.utils.ip.IpUtils;
+import com.jing.system.api.RemoteLogService;
+import com.jing.system.api.domain.SysLogininfor;
+
+/**
+ * 记录日志方法
+ *
+ * @author ruoyi
+ */
+@Component
+public class SysRecordLogService
+{
+ @Autowired
+ private RemoteLogService remoteLogService;
+
+ /**
+ * 记录登录信息
+ *
+ * @param username 用户名
+ * @param status 状态
+ * @param message 消息内容
+ * @return
+ */
+ public void recordLogininfor(String username, String status, String message)
+ {
+ SysLogininfor logininfor = new SysLogininfor();
+ logininfor.setUserName(username);
+ logininfor.setIpaddr(IpUtils.getIpAddr());
+ logininfor.setMsg(message);
+ // 日志状态
+ if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER))
+ {
+ logininfor.setStatus(Constants.LOGIN_SUCCESS_STATUS);
+ }
+ else if (Constants.LOGIN_FAIL.equals(status))
+ {
+ logininfor.setStatus(Constants.LOGIN_FAIL_STATUS);
+ }
+ remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER);
+ }
+}
diff --git a/jing-auth/src/main/resources/banner.txt b/jing-auth/src/main/resources/banner.txt
new file mode 100644
index 0000000..97c5c27
--- /dev/null
+++ b/jing-auth/src/main/resources/banner.txt
@@ -0,0 +1,10 @@
+Spring Boot Version: ${spring-boot.version}
+Spring Application Name: ${spring.application.name}
+ _ _ _
+ (_) | | | |
+ _ __ _ _ ___ _ _ _ ______ __ _ _ _ | |_ | |__
+| '__|| | | | / _ \ | | | || ||______| / _` || | | || __|| '_ \
+| | | |_| || (_) || |_| || | | (_| || |_| || |_ | | | |
+|_| \__,_| \___/ \__, ||_| \__,_| \__,_| \__||_| |_|
+ __/ |
+ |___/
\ No newline at end of file
diff --git a/jing-auth/src/main/resources/bootstrap.yml b/jing-auth/src/main/resources/bootstrap.yml
new file mode 100644
index 0000000..6ccb39d
--- /dev/null
+++ b/jing-auth/src/main/resources/bootstrap.yml
@@ -0,0 +1,27 @@
+# Tomcat
+server:
+ port: 8200
+
+# Spring
+spring:
+ application:
+ # 应用名称
+ name: jing-auth
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: 111.231.174.71:8848
+ namespace: a2f5cf16-e7f3-40f0-9cd7-171a055cacd2
+ config:
+ # 配置中心地址
+ server-addr: 111.231.174.71:8848
+ namespace: a2f5cf16-e7f3-40f0-9cd7-171a055cacd2
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
diff --git a/jing-auth/src/main/resources/logback.xml b/jing-auth/src/main/resources/logback.xml
new file mode 100644
index 0000000..1e82752
--- /dev/null
+++ b/jing-auth/src/main/resources/logback.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ ${log.pattern}
+
+
+
+
+
+ ${log.path}/info.log
+
+
+
+ ${log.path}/info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/error.log
+
+
+
+ ${log.path}/error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jing-auth/target/classes/banner.txt b/jing-auth/target/classes/banner.txt
new file mode 100644
index 0000000..97c5c27
--- /dev/null
+++ b/jing-auth/target/classes/banner.txt
@@ -0,0 +1,10 @@
+Spring Boot Version: ${spring-boot.version}
+Spring Application Name: ${spring.application.name}
+ _ _ _
+ (_) | | | |
+ _ __ _ _ ___ _ _ _ ______ __ _ _ _ | |_ | |__
+| '__|| | | | / _ \ | | | || ||______| / _` || | | || __|| '_ \
+| | | |_| || (_) || |_| || | | (_| || |_| || |_ | | | |
+|_| \__,_| \___/ \__, ||_| \__,_| \__,_| \__||_| |_|
+ __/ |
+ |___/
\ No newline at end of file
diff --git a/jing-auth/target/classes/bootstrap.yml b/jing-auth/target/classes/bootstrap.yml
new file mode 100644
index 0000000..6ccb39d
--- /dev/null
+++ b/jing-auth/target/classes/bootstrap.yml
@@ -0,0 +1,27 @@
+# Tomcat
+server:
+ port: 8200
+
+# Spring
+spring:
+ application:
+ # 应用名称
+ name: jing-auth
+ profiles:
+ # 环境配置
+ active: dev
+ cloud:
+ nacos:
+ discovery:
+ # 服务注册地址
+ server-addr: 111.231.174.71:8848
+ namespace: a2f5cf16-e7f3-40f0-9cd7-171a055cacd2
+ config:
+ # 配置中心地址
+ server-addr: 111.231.174.71:8848
+ namespace: a2f5cf16-e7f3-40f0-9cd7-171a055cacd2
+ # 配置文件格式
+ file-extension: yml
+ # 共享配置
+ shared-configs:
+ - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
diff --git a/jing-auth/target/classes/com/jing/RuoYiAuthApplication.class b/jing-auth/target/classes/com/jing/RuoYiAuthApplication.class
new file mode 100644
index 0000000..4aeb6ad
Binary files /dev/null and b/jing-auth/target/classes/com/jing/RuoYiAuthApplication.class differ
diff --git a/jing-auth/target/classes/com/jing/auth/controller/TokenController.class b/jing-auth/target/classes/com/jing/auth/controller/TokenController.class
new file mode 100644
index 0000000..9195257
Binary files /dev/null and b/jing-auth/target/classes/com/jing/auth/controller/TokenController.class differ
diff --git a/jing-auth/target/classes/com/jing/auth/form/LoginBody.class b/jing-auth/target/classes/com/jing/auth/form/LoginBody.class
new file mode 100644
index 0000000..a26a51f
Binary files /dev/null and b/jing-auth/target/classes/com/jing/auth/form/LoginBody.class differ
diff --git a/jing-auth/target/classes/com/jing/auth/form/RegisterBody.class b/jing-auth/target/classes/com/jing/auth/form/RegisterBody.class
new file mode 100644
index 0000000..244d6ca
Binary files /dev/null and b/jing-auth/target/classes/com/jing/auth/form/RegisterBody.class differ
diff --git a/jing-auth/target/classes/com/jing/auth/service/SysLoginService.class b/jing-auth/target/classes/com/jing/auth/service/SysLoginService.class
new file mode 100644
index 0000000..b6f1ed6
Binary files /dev/null and b/jing-auth/target/classes/com/jing/auth/service/SysLoginService.class differ
diff --git a/jing-auth/target/classes/com/jing/auth/service/SysPasswordService.class b/jing-auth/target/classes/com/jing/auth/service/SysPasswordService.class
new file mode 100644
index 0000000..142cfaf
Binary files /dev/null and b/jing-auth/target/classes/com/jing/auth/service/SysPasswordService.class differ
diff --git a/jing-auth/target/classes/com/jing/auth/service/SysRecordLogService.class b/jing-auth/target/classes/com/jing/auth/service/SysRecordLogService.class
new file mode 100644
index 0000000..4f5f209
Binary files /dev/null and b/jing-auth/target/classes/com/jing/auth/service/SysRecordLogService.class differ
diff --git a/jing-auth/target/classes/logback.xml b/jing-auth/target/classes/logback.xml
new file mode 100644
index 0000000..1e82752
--- /dev/null
+++ b/jing-auth/target/classes/logback.xml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ ${log.pattern}
+
+
+
+
+
+ ${log.path}/info.log
+
+
+
+ ${log.path}/info.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ INFO
+
+ ACCEPT
+
+ DENY
+
+
+
+
+ ${log.path}/error.log
+
+
+
+ ${log.path}/error.%d{yyyy-MM-dd}.log
+
+ 60
+
+
+ ${log.pattern}
+
+
+
+ ERROR
+
+ ACCEPT
+
+ DENY
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/jing-auth/target/jing-auth.jar b/jing-auth/target/jing-auth.jar
new file mode 100644
index 0000000..1be9eb8
Binary files /dev/null and b/jing-auth/target/jing-auth.jar differ
diff --git a/jing-auth/target/jing-auth.jar.original b/jing-auth/target/jing-auth.jar.original
new file mode 100644
index 0000000..39312a9
Binary files /dev/null and b/jing-auth/target/jing-auth.jar.original differ
diff --git a/jing-auth/target/maven-archiver/pom.properties b/jing-auth/target/maven-archiver/pom.properties
new file mode 100644
index 0000000..27e9037
--- /dev/null
+++ b/jing-auth/target/maven-archiver/pom.properties
@@ -0,0 +1,3 @@
+artifactId=jing-auth
+groupId=com.jing
+version=3.6.4
diff --git a/jing-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/jing-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
new file mode 100644
index 0000000..68ff2b7
--- /dev/null
+++ b/jing-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -0,0 +1,7 @@
+com\jing\auth\service\SysPasswordService.class
+com\jing\auth\form\LoginBody.class
+com\jing\auth\service\SysRecordLogService.class
+com\jing\auth\controller\TokenController.class
+com\jing\auth\service\SysLoginService.class
+com\jing\RuoYiAuthApplication.class
+com\jing\auth\form\RegisterBody.class
diff --git a/jing-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/jing-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..5cfad7b
--- /dev/null
+++ b/jing-auth/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,7 @@
+F:\Welcome-2105A\20240521142828\jing-cloud\jing-auth\src\main\java\com\jing\auth\controller\TokenController.java
+F:\Welcome-2105A\20240521142828\jing-cloud\jing-auth\src\main\java\com\jing\auth\service\SysLoginService.java
+F:\Welcome-2105A\20240521142828\jing-cloud\jing-auth\src\main\java\com\jing\auth\form\LoginBody.java
+F:\Welcome-2105A\20240521142828\jing-cloud\jing-auth\src\main\java\com\jing\auth\form\RegisterBody.java
+F:\Welcome-2105A\20240521142828\jing-cloud\jing-auth\src\main\java\com\jing\RuoYiAuthApplication.java
+F:\Welcome-2105A\20240521142828\jing-cloud\jing-auth\src\main\java\com\jing\auth\service\SysPasswordService.java
+F:\Welcome-2105A\20240521142828\jing-cloud\jing-auth\src\main\java\com\jing\auth\service\SysRecordLogService.java
diff --git a/jing-common/pom.xml b/jing-common/pom.xml
new file mode 100644
index 0000000..be9f74a
--- /dev/null
+++ b/jing-common/pom.xml
@@ -0,0 +1,29 @@
+
+
+
+ com.jing
+ jing
+ 3.6.4
+
+ 4.0.0
+
+
+ jing-common-log
+ jing-common-core
+ jing-common-redis
+ jing-common-seata
+ jing-common-swagger
+ jing-common-security
+ jing-common-datascope
+ jing-common-datasource
+
+
+ jing-common
+ pom
+
+
+ jing-common通用模块
+
+
+