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