From 7de1396e315896dbc72a9d54e44f77434ea90f18 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期日, 14 十二月 2025 23:47:34 +0800
Subject: [PATCH] feat:增加企业微信自动登录

---
 ruoyi-framework/src/main/java/com/ruoyi/framework/security/QyWechatAuthenticationProvider.java |   75 +++++++++++++++++++++++++++++++++++++
 1 files changed, 75 insertions(+), 0 deletions(-)

diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/security/QyWechatAuthenticationProvider.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/QyWechatAuthenticationProvider.java
new file mode 100644
index 0000000..5dbae65
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/security/QyWechatAuthenticationProvider.java
@@ -0,0 +1,75 @@
+package com.ruoyi.framework.security;
+
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.domain.model.LoginUser;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.web.service.SysPermissionService;
+import com.ruoyi.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.AuthenticationProvider;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.stereotype.Component;
+import java.util.Set;
+
+/**
+ * 浼佷笟寰俊鐧诲綍璁よ瘉鎻愪緵鑰�
+ * 绫讳技浜嶥aoAuthenticationProvider
+ * 
+ * @author ruoyi
+ */
+@Component
+public class QyWechatAuthenticationProvider implements AuthenticationProvider
+{
+    @Autowired
+    private ISysUserService userService;
+
+    @Autowired
+    private SysPermissionService permissionService;
+
+    @Override
+    public Authentication authenticate(Authentication authentication) throws AuthenticationException
+    {
+        QyWechatAuthenticationToken qyWechatToken = (QyWechatAuthenticationToken) authentication;
+        
+        String qyUserId = (String) qyWechatToken.getPrincipal();
+        String corpId = (String) qyWechatToken.getCredentials();
+        //qywechat__qyUserId
+        //瀵筿ywechat__杩涜澶勭悊寰楀埌qyUserId
+        qyUserId = StringUtils.substringAfter(qyUserId, "qywechat__");
+        // 鏍规嵁浼佷笟寰俊鐢ㄦ埛ID鏌ヨ鐢ㄦ埛
+        SysUser user = userService.selectUserByQyWechatUserId(qyUserId);
+        
+        if (user == null)
+        {
+            throw new BadCredentialsException("璇ヤ紒涓氬井淇¤处鍙峰皻鏈粦瀹氱郴缁熺敤鎴�");
+        }
+        
+        // 妫�鏌ョ敤鎴风姸鎬�
+        if ("1".equals(user.getStatus()))
+        {
+            throw new BadCredentialsException("鐢ㄦ埛宸茶鍋滅敤锛岃鑱旂郴绠$悊鍛�");
+        }
+        
+        if ("1".equals(user.getDelFlag()))
+        {
+            throw new BadCredentialsException("鐢ㄦ埛宸茶鍒犻櫎锛岃鑱旂郴绠$悊鍛�");
+        }
+        
+        // 鑾峰彇鐢ㄦ埛鏉冮檺
+        Set<String> permissions = permissionService.getMenuPermission(user);
+        
+        // 鍒涘缓LoginUser瀵硅薄
+        LoginUser loginUser = new LoginUser(user.getUserId(), user.getDeptId(), user, permissions);
+        
+        // 杩斿洖宸茶璇佺殑Token
+        return new QyWechatAuthenticationToken(loginUser, corpId, loginUser.getAuthorities());
+    }
+
+    @Override
+    public boolean supports(Class<?> authentication)
+    {
+        return QyWechatAuthenticationToken.class.isAssignableFrom(authentication);
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.1