瀏覽代碼

LoginUser 新增过期时间,方便判断 token 过期

rayson 6 月之前
父節點
當前提交
ab3d258128

+ 5 - 1
citu-gateway/src/main/java/com/citu/gateway/filter/security/LoginUser.java

@@ -2,6 +2,7 @@ package com.citu.gateway.filter.security;
 
 import lombok.Data;
 
+import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
 
@@ -35,5 +36,8 @@ public class LoginUser {
      * 授权范围
      */
     private List<String> scopes;
-
+    /**
+     * 过期时间
+     */
+    private LocalDateTime expiresTime;
 }

+ 5 - 2
citu-gateway/src/main/java/com/citu/gateway/filter/security/TokenAuthenticationFilter.java

@@ -3,6 +3,7 @@ package com.citu.gateway.filter.security;
 import cn.hutool.core.util.StrUtil;
 import com.citu.framework.common.core.KeyValue;
 import com.citu.framework.common.pojo.CommonResult;
+import com.citu.framework.common.util.date.LocalDateTimeUtils;
 import com.citu.framework.common.util.json.JsonUtils;
 import com.citu.gateway.util.SecurityFrameworkUtils;
 import com.citu.gateway.util.WebFrameworkUtils;
@@ -94,7 +95,8 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
         // 重要说明:defaultIfEmpty 作用,保证 Mono.empty() 情况,可以继续执行 `flatMap 的 chain.filter(exchange)` 逻辑,避免返回给前端空的 Response!!
         return getLoginUser(exchange, token).defaultIfEmpty(LOGIN_USER_EMPTY).flatMap(user -> {
             // 1. 无用户,直接 filter 继续请求
-            if (user == LOGIN_USER_EMPTY) {
+            if (user == LOGIN_USER_EMPTY || // 下面 expiresTime 的判断,为了解决 token 实际已经过期的情况
+                    user.getExpiresTime() == null || LocalDateTimeUtils.beforeNow(user.getExpiresTime())) {
                 return chain.filter(exchange);
             }
 
@@ -153,7 +155,8 @@ public class TokenAuthenticationFilter implements GlobalFilter, Ordered {
         OAuth2AccessTokenCheckRespDTO tokenInfo = result.getData();
         return new LoginUser().setId(tokenInfo.getUserId()).setUserType(tokenInfo.getUserType())
                 .setInfo(tokenInfo.getUserInfo()) // 额外的用户信息
-                .setTenantId(tokenInfo.getTenantId()).setScopes(tokenInfo.getScopes());
+                .setTenantId(tokenInfo.getTenantId()).setScopes(tokenInfo.getScopes())
+                .setExpiresTime(tokenInfo.getExpiresTime());
     }
 
     @Override

+ 1 - 0
citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/notify/dto/NotifySendSingleToUserReqDTO.java

@@ -18,6 +18,7 @@ public class NotifySendSingleToUserReqDTO {
     @Schema(description = "站内信模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "USER_SEND")
     @NotEmpty(message = "站内信模板编号不能为空")
     private String templateCode;
+
     @Schema(description = "邮件模板参数")
     private Map<String, Object> templateParams;
 }

+ 3 - 0
citu-module-system/citu-module-system-api/src/main/java/com/citu/module/system/api/user/dto/AdminUserRespDTO.java

@@ -28,6 +28,9 @@ public class AdminUserRespDTO implements VO {
     @Schema(description = "手机号码", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300")
     private String mobile;
 
+    @Schema(description = "用户邮箱", requiredMode = Schema.RequiredMode.REQUIRED, example = "11@qq.com")
+    private String email;
+
     @Schema(description = "用户头像", requiredMode = Schema.RequiredMode.REQUIRED, example = "https://www.iocoder.cn/1.png")
     private String avatar;
 

+ 13 - 1
menduner/menduner-common/src/main/java/com/citu/module/menduner/common/CommonConstants.java

@@ -18,11 +18,23 @@ public class CommonConstants {
     /** 企业发布职位额度赠送提醒 **/
     public static final String EMAIL_ENTERPRISE_PUBLISH_JOB_QUOTA = "menduner-enterprise-publish-job-quota";
 
+    /** 系统提示-后台管理系统公共模版 **/
+    public static final String EMAIL_SYS_NOTIFY_TEMPLATE = "menduner-sys-notify";
+
+    /** ========== 短信模版 ========== **/
+    public static final String SMS_SYS_NOTIFY_TEMPLATE = "menduner-sys-notify";
+
     /** ========== 站内信模版 ========== **/
     public static final List<Long> notifySysUserId = new ArrayList<>(){{ add(131L);}};
+    public static final Map<String,String> notifySysStrMap = new HashMap<>(){{
+        put(NOTIFY_SYS_POINT_REDEEM,"积分兑换");
+        put(NOTIFY_SYS_INVOICE,"开具发票");
+        put(NOTIFY_SYS_ENTERPRISE_REGISTER,"企业申请注册");
+        put(NOTIFY_SYS_HUNTER_SERVICE,"猎头服务");
+    }};
     /** 系统提示-积分兑换 1-{商品},2-{兑换积分},3-{联系人},4-{联系电话}**/
     public static final String NOTIFY_SYS_POINT_REDEEM = "menduner_sys_point_redeem";
-    /** 系统提示-开发票 1-{开票金额},2-{企业}**/
+    /** 系统提示-开发票 1-{开票金额},2-{企业}**/
     public static final String NOTIFY_SYS_INVOICE = "menduner_sys_invoice";
     /** 系统提示-企业申请注册 1-{企业}**/
     public static final String NOTIFY_SYS_ENTERPRISE_REGISTER = "menduner_sys_enterprise_register";

+ 3 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/controller/admin/hire/HireCommissionRatioController.java

@@ -21,6 +21,8 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import com.citu.framework.security.core.annotations.PreAuthenticated;
+
+import javax.annotation.security.PermitAll;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
@@ -63,7 +65,7 @@ public class HireCommissionRatioController {
     }
 
 
-    @PreAuthenticated
+    @PermitAll
     @GetMapping("/get")
     @Operation(summary = "获得众聘-佣金比例")
     // @PreAuthorize("@ss.hasPermission('menduner:system:hire-commission-ratio:query')")

+ 4 - 0
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/framework/rpc/config/RpcConfiguration.java

@@ -9,19 +9,23 @@ import com.citu.module.pay.api.wallet.PayWalletApi;
 import com.citu.module.system.api.mail.MailSendApi;
 import com.citu.module.system.api.notify.NotifyMessageSendApi;
 import com.citu.module.system.api.sms.SmsCodeApi;
+import com.citu.module.system.api.sms.SmsSendApi;
 import com.citu.module.system.api.social.SocialClientApi;
 import com.citu.module.system.api.social.SocialUserApi;
+import com.citu.module.system.api.user.AdminUserApi;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.context.annotation.Configuration;
 
 @Configuration(proxyBeanMethods = false)
 @EnableFeignClients(clients = {
         SmsCodeApi.class,
+        SmsSendApi.class,
         FileApi.class,
         SocialUserApi.class,
         SocialClientApi.class,
         MailSendApi.class,
         NotifyMessageSendApi.class,
+        AdminUserApi.class,
         ImMessageApi.class,
         PayOrderApi.class,
         PayRefundApi.class,

+ 1 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/enterprise/register/EnterpriseRegisterServiceImpl.java

@@ -291,7 +291,7 @@ public class EnterpriseRegisterServiceImpl implements EnterpriseRegisterService
                         .setTemplateParams(
                                 // 假设MapUtil.builder()的API允许链式调用,并且返回的是Map.Builder类型
                                 // 如果不是,你需要根据实际的API进行调整
-                                MapUtil.<String, Object>builder() // 显式指定泛型类型可能更好
+                                MapUtil.<String, Object>builder() 
                                         .put("1",reqVO.getName())
                                         .build()
                         ));

+ 2 - 2
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/service/redeem/RedeemServiceImpl.java

@@ -118,13 +118,13 @@ public class RedeemServiceImpl implements RedeemService {
         );
 
         // 发送系统消息
-        messageUtils.sendPlatformSystemNotifyMessage(
+        messageUtils.sendPlatformSystemNotifyAndSmsAndEmailMessage(
                 new NotifySendSingleToUserReqDTO()
                         .setTemplateCode(NOTIFY_SYS_POINT_REDEEM)
                         .setTemplateParams(
                                 // 假设MapUtil.builder()的API允许链式调用,并且返回的是Map.Builder类型
                                 // 如果不是,你需要根据实际的API进行调整
-                                MapUtil.<String, Object>builder() // 显式指定泛型类型可能更好
+                                MapUtil.<String, Object>builder() 
                                         .put("1", redeem.getName())
                                         .put("2", redeem.getPoint())
                                         .put("3", redeem.getContactName())

+ 64 - 1
menduner/menduner-system-biz/src/main/java/com/citu/module/menduner/system/util/MessageUtils.java

@@ -1,14 +1,22 @@
 package com.citu.module.menduner.system.util;
 
+import cn.hutool.core.map.MapUtil;
 import com.citu.framework.common.enums.UserTypeEnum;
+import com.citu.framework.common.pojo.CommonResult;
+import com.citu.module.menduner.common.CommonConstants;
 import com.citu.module.menduner.im.api.ImCollectMessageReqVo;
 import com.citu.module.menduner.im.api.ImCollectUserReqVo;
 import com.citu.module.menduner.im.api.ImMessageApi;
-import com.citu.module.menduner.common.CommonConstants;
+import com.citu.module.system.api.mail.MailSendApi;
+import com.citu.module.system.api.mail.dto.MailSendSingleToUserReqDTO;
 import com.citu.module.system.api.notify.NotifyMessageSendApi;
 import com.citu.module.system.api.notify.dto.NotifySendSingleToUserReqDTO;
+import com.citu.module.system.api.sms.SmsSendApi;
+import com.citu.module.system.api.sms.dto.send.SmsSendSingleToUserReqDTO;
 import com.citu.module.system.api.social.SocialClientApi;
 import com.citu.module.system.api.social.dto.SocialWxaSubscribeMessageSendReqDTO;
+import com.citu.module.system.api.user.AdminUserApi;
+import com.citu.module.system.api.user.dto.AdminUserRespDTO;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
@@ -17,6 +25,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import static com.citu.module.menduner.common.CommonConstants.WX_SUBSCRIBE_TEMPLATE_PAGE;
+import static com.citu.module.menduner.common.CommonConstants.notifySysStrMap;
 
 /**
  * 消息通知
@@ -30,9 +39,18 @@ public class MessageUtils {
     @Resource
     private ImMessageApi imMessageApi;
 
+    @Resource
+    private MailSendApi mailSendApi;
+
+    @Resource
+    private SmsSendApi smsSendApi;
+
     @Resource
     private SocialClientApi socialClientApi;
 
+    @Resource
+    private AdminUserApi adminUserApi;
+
 
     /**
      * 发送后台管理系统消息通知
@@ -49,6 +67,43 @@ public class MessageUtils {
         }
     }
 
+    /**
+     * 发送后台管理系统消息通知、短信、邮箱
+     *
+     * @param reqDTO 请求参数
+     */
+    @Async
+    public void sendPlatformSystemNotifyAndSmsAndEmailMessage(NotifySendSingleToUserReqDTO reqDTO) {
+        // 参数不变,更改方法
+        // 发送系统消息
+        for (Long userId : CommonConstants.notifySysUserId) {
+            reqDTO.setUserId(userId);
+            CommonResult<AdminUserRespDTO> result = adminUserApi.getUser(userId);
+            if (result.isSuccess()) {
+                AdminUserRespDTO data = result.getData();
+                if (data != null) {
+                    // 发送短信
+                    SmsSendSingleToUserReqDTO smsReqDTO = new SmsSendSingleToUserReqDTO();
+                    smsReqDTO.setUserId(data.getId());
+                    smsReqDTO.setMobile(data.getMobile());
+                    smsReqDTO.setTemplateCode(CommonConstants.SMS_SYS_NOTIFY_TEMPLATE);
+                    reqDTO.setTemplateParams(MapUtil.<String, Object>builder()
+                            .put("1", notifySysStrMap.get(reqDTO.getTemplateCode()))
+                            .build());
+                    smsSendApi.sendSingleSmsToAdmin(smsReqDTO);
+                    // 发送邮件
+                    MailSendSingleToUserReqDTO emailReqDTO = new MailSendSingleToUserReqDTO();
+                    emailReqDTO.setMail(data.getEmail());
+                    emailReqDTO.setTemplateCode(CommonConstants.EMAIL_SYS_NOTIFY_TEMPLATE);
+                    reqDTO.setTemplateParams(reqDTO.getTemplateParams());
+                    mailSendApi.sendSingleMailToAdmin(emailReqDTO);
+                }
+            }
+            // 发送系统消息通知
+            notifyMessageSendApi.sendSingleMessageToAdmin(reqDTO);
+        }
+    }
+
     /**
      * 发送im系统消息通知
      *
@@ -69,6 +124,14 @@ public class MessageUtils {
         imMessageApi.systemMessage(reqVo);
     }
 
+    /**
+     * 发送im系统消息和微信订阅消息
+     *
+     * @param userId       用户id
+     * @param enterpriseId 企业id
+     * @param message      消息内容
+     * @param wxReq        微信订阅消息参数
+     */
     @Async
     public void sendSystemImAndWxSubscribeMessage(Long userId,
                                                   Long enterpriseId,