Переглянути джерело

feat(applet): 实现小程序订单取消功能并优化用户认证流程

- 添加订单主动取消接口,支持用户取消未支付订单
- 优化小程序用户认证逻辑,支持直接操作c_user_info表
- 完善JWT令牌验证流程,增加详细的日志记录
- 更新安全配置,注入UserInfoService用于小程序认证
- 修改数据权限处理器,支持小程序用户无数据权限场景
- 调整控制器路径和接口文档扫描配置
- 修复令牌验证异常处理和黑名单检查逻辑
wzq 2 днів тому
батько
коміт
fd94868e23

+ 88 - 0
src/main/java/com/zsElectric/boot/security/model/AppletUserDetails.java

@@ -0,0 +1,88 @@
+package com.zsElectric.boot.security.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.authority.SimpleGrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.util.Collection;
+import java.util.Collections;
+
+/**
+ * 小程序用户认证详情
+ * <p>
+ * 用于小程序用户的认证和授权
+ *
+ * @author zsElectric
+ * @since 2025-12-17
+ */
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class AppletUserDetails implements UserDetails {
+
+    /**
+     * 用户ID (c_user_info表的ID)
+     */
+    private Long userId;
+
+    /**
+     * 手机号(作为用户名)
+     */
+    private String phone;
+
+    /**
+     * 微信openid
+     */
+    private String openid;
+
+    /**
+     * 昵称
+     */
+    private String nickname;
+
+    /**
+     * 账号是否启用
+     */
+    private Boolean enabled = true;
+
+    @Override
+    public Collection<? extends GrantedAuthority> getAuthorities() {
+        // 小程序用户默认角色
+        return Collections.singleton(new SimpleGrantedAuthority("ROLE_APPLET_USER"));
+    }
+
+    @Override
+    public String getPassword() {
+        // 小程序用户无需密码
+        return null;
+    }
+
+    @Override
+    public String getUsername() {
+        // 使用手机号作为用户名
+        return this.phone;
+    }
+
+    @Override
+    public boolean isAccountNonExpired() {
+        return true;
+    }
+
+    @Override
+    public boolean isAccountNonLocked() {
+        return true;
+    }
+
+    @Override
+    public boolean isCredentialsNonExpired() {
+        return true;
+    }
+
+    @Override
+    public boolean isEnabled() {
+        return this.enabled;
+    }
+}