Przeglądaj źródła

1.【修复】定时任务刷新本地缓存时,无租户上线文,导致查询报错
2. member 模块,统一使用 member 前缀
3. 修改 Spring Security logout 配置,支持多用户类型的退出

YunaiV 3 lat temu
rodzic
commit
cee7e50720
18 zmienionych plików z 63 dodań i 55 usunięć
  1. 0 1
      http-client.env.json
  2. 2 0
      yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java
  3. 7 1
      yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java
  4. 26 11
      yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/util/SecurityFrameworkUtils.java
  5. 0 6
      yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java
  6. 7 4
      yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http
  7. 6 1
      yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java
  8. 0 0
      yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/weixin/AppWxMpController.http
  9. 3 3
      yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/weixin/AppWxMpController.java
  10. 1 1
      yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java
  11. 1 1
      yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java
  12. 7 0
      yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/package-info.java
  13. 1 1
      yudao-module-member/yudao-module-member-impl/src/test/resources/sql/clean.sql
  14. 1 1
      yudao-module-member/yudao-module-member-impl/src/test/resources/sql/create_tables.sql
  15. 0 14
      yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/UserServerApplication.java
  16. 0 7
      yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/package-info.java
  17. 0 3
      yudao-user-server/src/main/resources/application.yaml
  18. 1 0
      更新日志.md

+ 0 - 1
http-client.env.json

@@ -1,7 +1,6 @@
 {
 {
   "local": {
   "local": {
     "baseUrl": "http://127.0.0.1:48080/api",
     "baseUrl": "http://127.0.0.1:48080/api",
-    "userServerUrl": "http://127.0.0.1:28080/api",
     "token": "test1",
     "token": "test1",
 
 
     "userApi": "http://127.0.0.1:48080/app-api",
     "userApi": "http://127.0.0.1:48080/app-api",

+ 2 - 0
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/dept/SysDeptMapper.java

@@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO;
 import cn.iocoder.yudao.adminserver.modules.system.controller.dept.vo.dept.SysDeptListReqVO;
 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO;
 import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.dept.SysDeptDO;
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
 
 
@@ -28,6 +29,7 @@ public interface SysDeptMapper extends BaseMapperX<SysDeptDO> {
         return selectCount(SysDeptDO::getParentId, parentId);
         return selectCount(SysDeptDO::getParentId, parentId);
     }
     }
 
 
+    @InterceptorIgnore(tenantLine = "on") // 该方法忽略多租户。原因:该方法被异步 task 调用,此时获取不到租户编号
     default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) {
     default boolean selectExistsByUpdateTimeAfter(Date maxUpdateTime) {
         return selectOne(new LambdaQueryWrapper<SysDeptDO>().select(SysDeptDO::getId)
         return selectOne(new LambdaQueryWrapper<SysDeptDO>().select(SysDeptDO::getId)
                 .gt(SysDeptDO::getUpdateTime, maxUpdateTime).last(SqlConstants.LIMIT1)) != null;
                 .gt(SysDeptDO::getUpdateTime, maxUpdateTime).last(SqlConstants.LIMIT1)) != null;

+ 7 - 1
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/config/YudaoWebSecurityConfigurerAdapter.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.framework.security.config;
 package cn.iocoder.yudao.framework.security.config;
 
 
+import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider;
 import cn.iocoder.yudao.framework.security.core.authentication.MultiUserDetailsAuthenticationProvider;
 import cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter;
 import cn.iocoder.yudao.framework.security.core.filter.JWTAuthenticationTokenFilter;
 import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService;
 import cn.iocoder.yudao.framework.security.core.service.SecurityAuthFrameworkService;
@@ -21,8 +22,10 @@ import org.springframework.security.web.AuthenticationEntryPoint;
 import org.springframework.security.web.access.AccessDeniedHandler;
 import org.springframework.security.web.access.AccessDeniedHandler;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
 import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
+import org.springframework.security.web.util.matcher.RequestMatcher;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 
 
 /**
 /**
  * 自定义的 Spring Security 配置适配器实现
  * 自定义的 Spring Security 配置适配器实现
@@ -106,6 +109,7 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap
      */
      */
     @Override
     @Override
     protected void configure(HttpSecurity httpSecurity) throws Exception {
     protected void configure(HttpSecurity httpSecurity) throws Exception {
+        // 登出
         httpSecurity
         httpSecurity
                 // 开启跨域
                 // 开启跨域
                 .cors().and()
                 .cors().and()
@@ -117,7 +121,9 @@ public class YudaoWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdap
                 // 一堆自定义的 Spring Security 处理器
                 // 一堆自定义的 Spring Security 处理器
                 .exceptionHandling().authenticationEntryPoint(authenticationEntryPoint)
                 .exceptionHandling().authenticationEntryPoint(authenticationEntryPoint)
                     .accessDeniedHandler(accessDeniedHandler).and()
                     .accessDeniedHandler(accessDeniedHandler).and()
-                .logout().logoutUrl(buildAdminApi("/logout")).logoutSuccessHandler(logoutSuccessHandler); // 登出
+                // 登出地址的配置
+                .logout().logoutSuccessHandler(logoutSuccessHandler).logoutRequestMatcher(request -> // 匹配多种用户类型的登出
+                        StrUtil.equalsAny(request.getRequestURI(), buildAdminApi("/logout"), buildAppApi("/member/logout")));
 
 
         // 设置每个请求的权限 ①:全局共享规则
         // 设置每个请求的权限 ①:全局共享规则
         httpSecurity.authorizeRequests()
         httpSecurity.authorizeRequests()

+ 26 - 11
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/util/SecurityFrameworkUtils.java

@@ -42,17 +42,26 @@ public class SecurityFrameworkUtils {
     }
     }
 
 
     /**
     /**
-     * 获取当前用户
+     * 获得当前认证信息
      *
      *
-     * @return 当前用户
+     * @return 认证信息
      */
      */
-    @Nullable
-    public static LoginUser getLoginUser() {
+    public static Authentication getAuthentication() {
         SecurityContext context = SecurityContextHolder.getContext();
         SecurityContext context = SecurityContextHolder.getContext();
         if (context == null) {
         if (context == null) {
             return null;
             return null;
         }
         }
-        Authentication authentication = context.getAuthentication();
+        return context.getAuthentication();
+    }
+
+    /**
+     * 获取当前用户
+     *
+     * @return 当前用户
+     */
+    @Nullable
+    public static LoginUser getLoginUser() {
+        Authentication authentication = getAuthentication();
         if (authentication == null) {
         if (authentication == null) {
             return null;
             return null;
         }
         }
@@ -88,16 +97,22 @@ public class SecurityFrameworkUtils {
      * @param request 请求
      * @param request 请求
      */
      */
     public static void setLoginUser(LoginUser loginUser, HttpServletRequest request) {
     public static void setLoginUser(LoginUser loginUser, HttpServletRequest request) {
-        // 创建 UsernamePasswordAuthenticationToken 对象
-        UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
-                loginUser, null, loginUser.getAuthorities());
-        authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
-        // 设置到上下文
-        SecurityContextHolder.getContext().setAuthentication(authenticationToken);
+        // 创建 Authentication,并设置到上下文
+        Authentication authentication = buildAuthentication(loginUser, request);
+        SecurityContextHolder.getContext().setAuthentication(authentication);
+
         // 额外设置到 request 中,用于 ApiAccessLogFilter 可以获取到用户编号;
         // 额外设置到 request 中,用于 ApiAccessLogFilter 可以获取到用户编号;
         // 原因是,Spring Security 的 Filter 在 ApiAccessLogFilter 后面,在它记录访问日志时,线上上下文已经没有用户编号等信息
         // 原因是,Spring Security 的 Filter 在 ApiAccessLogFilter 后面,在它记录访问日志时,线上上下文已经没有用户编号等信息
         WebFrameworkUtils.setLoginUserId(request, loginUser.getId());
         WebFrameworkUtils.setLoginUserId(request, loginUser.getId());
         WebFrameworkUtils.setLoginUserType(request, loginUser.getUserType());
         WebFrameworkUtils.setLoginUserType(request, loginUser.getUserType());
     }
     }
 
 
+    private static Authentication buildAuthentication(LoginUser loginUser, HttpServletRequest request) {
+        // 创建 UsernamePasswordAuthenticationToken 对象
+        UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(
+                loginUser, null, loginUser.getAuthorities());
+        authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
+        return authenticationToken;
+    }
+
 }
 }

+ 0 - 6
yudao-module-bpm/yudao-module-bpm-activiti/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/config/BpmActivitiConfiguration.java

@@ -10,17 +10,11 @@ import cn.iocoder.yudao.coreservice.modules.bpm.api.group.BpmUserGroupServiceApi
 import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService;
 import cn.iocoder.yudao.coreservice.modules.system.service.dept.SysDeptCoreService;
 import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService;
 import cn.iocoder.yudao.coreservice.modules.system.service.permission.SysPermissionCoreService;
 import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
 import cn.iocoder.yudao.coreservice.modules.system.service.user.SysUserCoreService;
-import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmUserGroupService;
-import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService;
-import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
-import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService;
 import org.activiti.api.runtime.shared.identity.UserGroupManager;
 import org.activiti.api.runtime.shared.identity.UserGroupManager;
-import org.activiti.core.common.spring.identity.ActivitiUserGroupManagerImpl;
 import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
 import org.activiti.spring.boot.ProcessEngineConfigurationConfigurer;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.security.core.userdetails.UserDetailsService;
 
 
 import java.util.Collections;
 import java.util.Collections;
 import java.util.List;
 import java.util.List;

+ 7 - 4
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.http

@@ -1,5 +1,5 @@
 ### 请求 /login 接口 => 成功
 ### 请求 /login 接口 => 成功
-POST {{userApi}}/login
+POST {{userApi}}/member/login
 Content-Type: application/json
 Content-Type: application/json
 tenant-id: {{userTenentId}}
 tenant-id: {{userTenentId}}
 
 
@@ -9,8 +9,9 @@ tenant-id: {{userTenentId}}
 }
 }
 
 
 ### 请求 /send-sms-code 接口 => 成功
 ### 请求 /send-sms-code 接口 => 成功
-POST {{userServerUrl}}/send-sms-code
+POST {{userApi}}/member/send-sms-code
 Content-Type: application/json
 Content-Type: application/json
+tenant-id: {{userTenentId}}
 
 
 {
 {
   "mobile": "15601691399",
   "mobile": "15601691399",
@@ -18,8 +19,9 @@ Content-Type: application/json
 }
 }
 
 
 ### 请求 /sms-login 接口 => 成功
 ### 请求 /sms-login 接口 => 成功
-POST {{userServerUrl}}/sms-login
+POST {{userApi}}/member/sms-login
 Content-Type: application/json
 Content-Type: application/json
+tenant-id: {{userTenentId}}
 
 
 {
 {
   "mobile": "15601691301",
   "mobile": "15601691301",
@@ -27,6 +29,7 @@ Content-Type: application/json
 }
 }
 
 
 ### 请求 /logout 接口 => 成功
 ### 请求 /logout 接口 => 成功
-POST {{userServerUrl}}/logout
+POST {{userApi}}/member/logout
 Content-Type: application/json
 Content-Type: application/json
 Authorization: Bearer c1b76bdaf2c146c581caa4d7fd81ee66
 Authorization: Bearer c1b76bdaf2c146c581caa4d7fd81ee66
+tenant-id: {{userTenentId}}

+ 6 - 1
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/auth/AppAuthController.java

@@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
 import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
 import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
 import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.member.controller.app.auth.vo.*;
 import cn.iocoder.yudao.module.member.controller.app.auth.vo.*;
 import cn.iocoder.yudao.module.member.service.auth.AuthService;
 import cn.iocoder.yudao.module.member.service.auth.AuthService;
 import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService;
 import cn.iocoder.yudao.module.member.service.sms.SysSmsCodeService;
@@ -13,6 +14,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
@@ -26,7 +28,7 @@ import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUti
 
 
 @Api(tags = "APP 端 - 认证")
 @Api(tags = "APP 端 - 认证")
 @RestController
 @RestController
-@RequestMapping("/")
+@RequestMapping("/member/")
 @Validated
 @Validated
 @Slf4j
 @Slf4j
 public class AppAuthController {
 public class AppAuthController {
@@ -39,6 +41,9 @@ public class AppAuthController {
     @Resource
     @Resource
     private SysSocialCoreService socialService;
     private SysSocialCoreService socialService;
 
 
+    @Resource
+    private LogoutSuccessHandler logoutSuccessHandler;
+
     @PostMapping("/login")
     @PostMapping("/login")
     @ApiOperation("使用手机 + 密码登录")
     @ApiOperation("使用手机 + 密码登录")
     @OperateLog(enable = false) // 避免 Post 请求被记录操作日志
     @OperateLog(enable = false) // 避免 Post 请求被记录操作日志

+ 0 - 0
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.http → yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/weixin/AppWxMpController.http


+ 3 - 3
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/controller/mp/WxMpController.java → yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/controller/app/weixin/AppWxMpController.java

@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.userserver.modules.weixin.controller.mp;
+package cn.iocoder.yudao.module.member.controller.app.weixin;
 
 
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.Api;
@@ -19,10 +19,10 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 
 
 @Api(tags = "微信公众号")
 @Api(tags = "微信公众号")
 @RestController
 @RestController
-@RequestMapping("/wx/mp")
+@RequestMapping("/member/wx-mp")
 @Validated
 @Validated
 @Slf4j
 @Slf4j
-public class WxMpController {
+public class AppWxMpController {
 
 
     @Resource
     @Resource
     private WxMpService mpService;
     private WxMpService mpService;

+ 1 - 1
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/user/UserDO.java

@@ -16,7 +16,7 @@ import java.util.Date;
  *
  *
  * @author 芋道源码
  * @author 芋道源码
  */
  */
-@TableName(value = "mbr_user", autoResultMap = true)
+@TableName(value = "member_user", autoResultMap = true)
 @Data
 @Data
 @EqualsAndHashCode(callSuper = true)
 @EqualsAndHashCode(callSuper = true)
 @Builder
 @Builder

+ 1 - 1
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/dal/package-info.java

@@ -4,6 +4,6 @@
  * 2. redis:Redis 的 CRUD 操作
  * 2. redis:Redis 的 CRUD 操作
  * 3. mysql:MySQL 的 CRUD 操作
  * 3. mysql:MySQL 的 CRUD 操作
  *
  *
- * 其中,MySQL 的表以 mbr_ 作为前缀
+ * 其中,MySQL 的表以 member_ 作为前缀
  */
  */
 package cn.iocoder.yudao.module.member.dal;
 package cn.iocoder.yudao.module.member.dal;

+ 7 - 0
yudao-module-member/yudao-module-member-impl/src/main/java/cn/iocoder/yudao/module/member/package-info.java

@@ -1 +1,8 @@
+/**
+ * member 模块,我们放会员业务。
+ * 例如说:会员中心等等
+ *
+ * 1. Controller URL:以 /member/ 开头,避免和其它 Module 冲突
+ * 2. DataObject 表名:以 member_ 开头,方便在数据库中区分
+ */
 package cn.iocoder.yudao.module.member;
 package cn.iocoder.yudao.module.member;

+ 1 - 1
yudao-module-member/yudao-module-member-impl/src/test/resources/sql/clean.sql

@@ -1,2 +1,2 @@
 -- mbr 开头的 DB
 -- mbr 开头的 DB
-DELETE FROM "mbr_user";
+DELETE FROM "member_user";

+ 1 - 1
yudao-module-member/yudao-module-member-impl/src/test/resources/sql/create_tables.sql

@@ -1,5 +1,5 @@
 -- mbr 开头的 DB
 -- mbr 开头的 DB
-CREATE TABLE IF NOT EXISTS "mbr_user"  (
+CREATE TABLE IF NOT EXISTS "member_user"  (
     "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '编号',
     "id" bigint NOT NULL GENERATED BY DEFAULT AS IDENTITY COMMENT '编号',
     "nickname" varchar(30)  NOT NULL DEFAULT '' COMMENT '用户昵称',
     "nickname" varchar(30)  NOT NULL DEFAULT '' COMMENT '用户昵称',
     "avatar" varchar(255)  NOT NULL DEFAULT '' COMMENT '头像',
     "avatar" varchar(255)  NOT NULL DEFAULT '' COMMENT '头像',

+ 0 - 14
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/UserServerApplication.java

@@ -1,14 +0,0 @@
-package cn.iocoder.yudao.userserver;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SuppressWarnings("SpringComponentScan") // 忽略 IDEA 无法识别 ${yudao.info.base-package} 和 ${yudao.core-service.base-package}
-@SpringBootApplication(scanBasePackages = {"${yudao.info.base-package}", "${yudao.core-service.base-package}"})
-public class UserServerApplication {
-
-    public static void main(String[] args) {
-        SpringApplication.run(UserServerApplication.class, args);
-    }
-
-}

+ 0 - 7
yudao-user-server/src/main/java/cn/iocoder/yudao/userserver/modules/weixin/package-info.java

@@ -1,7 +0,0 @@
-/**
- * weixin 包下,我们放通用业务,支撑上层的核心业务。
- * 例如说:用户、部门、权限、数据字典等等
- *
- * 缩写:wx
- */
-package cn.iocoder.yudao.userserver.modules.weixin;

+ 0 - 3
yudao-user-server/src/main/resources/application.yaml

@@ -37,8 +37,6 @@ mybatis-plus:
   mapper-locations: classpath*:mapper/*.xml
   mapper-locations: classpath*:mapper/*.xml
   type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject, ${yudao.core-service.base-package}.modules.*.dal.dataobject
   type-aliases-package: ${yudao.info.base-package}.modules.*.dal.dataobject, ${yudao.core-service.base-package}.modules.*.dal.dataobject
 
 
-
-
 --- #################### 芋道相关配置 ####################
 --- #################### 芋道相关配置 ####################
 
 
 yudao:
 yudao:
@@ -67,5 +65,4 @@ yudao:
       - cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConstants
       - cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConstants
       - cn.iocoder.yudao.userserver.modules.system.enums.SysErrorCodeConstants
       - cn.iocoder.yudao.userserver.modules.system.enums.SysErrorCodeConstants
 
 
-
 debug: false
 debug: false

+ 1 - 0
更新日志.md

@@ -23,6 +23,7 @@
 ### 🐞 Bug Fixes
 ### 🐞 Bug Fixes
 
 
 *【修复】用户无权限访问 指定 API 时,未返回 FORBIDDEN 结果码
 *【修复】用户无权限访问 指定 API 时,未返回 FORBIDDEN 结果码
+*【修复】定时任务刷新本地缓存时,无租户上线文,导致查询报错
 
 
 ### 🔨 Dependency Upgrades
 ### 🔨 Dependency Upgrades