From bedff910eb2394a8ce68762a8f3a413d81187ac1 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期五, 10 七月 2026 09:17:34 +0800
Subject: [PATCH] 后台
---
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java | 87 ++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 85 insertions(+), 2 deletions(-)
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
index e4c3061..aab3f29 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -1,7 +1,9 @@
package com.ruoyi.web.controller.system;
import com.alibaba.fastjson.JSON;
+import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.constant.Constants;
+import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysRole;
@@ -13,8 +15,11 @@
import com.ruoyi.framework.web.service.SysLoginService;
import com.ruoyi.framework.web.service.SysPermissionService;
import com.ruoyi.framework.web.service.TokenService;
+import com.ruoyi.framework.manager.AsyncManager;
+import com.ruoyi.framework.manager.factory.AsyncFactory;
import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.system.service.ISysRoleService;
+import com.ruoyi.web.controller.tool.MiddlePlatformDataQuery;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
@@ -24,6 +29,7 @@
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
+import java.io.IOException;
import java.util.List;
import java.util.Set;
@@ -50,6 +56,8 @@
private TokenService tokenService;
@Autowired
private ISysRoleService roleService;
+ @Autowired
+ private RuoYiConfig ruoyiConfig;
/**
* 账号密码登录
@@ -61,10 +69,61 @@
public AjaxResult login(@RequestBody String param)
{
LoginBody loginBody = JSON.parseObject(param, LoginBody.class);
- AjaxResult ajax = AjaxResult.success();
- // 生成令牌
+ return buildLoginResult(loginBody);
+ }
+
+ @Anonymous
+ @ApiOperation(value = "中台优先账号密码登录", notes = "集群中台模式下先判断中台用户,未命中时由前端回落本地登录")
+ @PostMapping("/api/middle-platform/login")
+ public AjaxResult middlePlatformLogin(@RequestBody String param)
+ {
+ LoginBody loginBody = JSON.parseObject(param, LoginBody.class);
+ if (!ruoyiConfig.isConnectMiddlePlatform())
+ {
+ return buildLoginResult(loginBody);
+ }
+ loginService.validateCaptcha(loginBody.getUsername(), loginBody.getCode(), loginBody.getUuid());
+ try
+ {
+ String middlePlatformToken = MiddlePlatformDataQuery.login(loginBody.getUsername(), loginBody.getPassword());
+ if (middlePlatformToken == null)
+ {
+ return buildLocalFallbackLoginResult(loginBody);
+ }
+ AjaxResult ajax = buildLoginResult(loginService.loginByTrustedUsername(
+ loginBody.getUsername(), "middlePlatform", middlePlatformToken));
+ ajax.put("loginSource", "middlePlatform");
+ return ajax;
+ }
+ catch (IOException e)
+ {
+ if (loginBody != null)
+ {
+ return buildLocalFallbackLoginResult(loginBody);
+ }
+ return AjaxResult.error("中台登录失败:" + e.getMessage());
+ }
+ }
+
+ private AjaxResult buildLocalFallbackLoginResult(LoginBody loginBody)
+ {
+ AjaxResult ajax = buildLoginResult(loginService.loginWithoutCaptcha(loginBody.getUsername(), loginBody.getPassword()));
+ ajax.put("loginSource", "local");
+ ajax.put("middlePlatformFallback", true);
+ return ajax;
+ }
+
+ private AjaxResult buildLoginResult(LoginBody loginBody)
+ {
LoginUser loginUser = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
loginBody.getUuid());
+ return buildLoginResult(loginUser);
+ }
+
+ private AjaxResult buildLoginResult(LoginUser loginUser)
+ {
+ AjaxResult ajax = AjaxResult.success();
+ // 生成令牌
ajax.put(Constants.TOKEN, tokenService.createToken(loginUser));
List<SysRole> roles = loginUser.getUser().getRoles();
if(CollectionUtils.isEmpty(roles)){
@@ -82,6 +141,30 @@
return ajax;
}
+ @PostMapping("/api/middle-platform/logout")
+ public AjaxResult middlePlatformLogout()
+ {
+ AjaxResult ajax = AjaxResult.success("退出成功");
+ LoginUser loginUser = SecurityUtils.getLoginUser();
+ if (loginUser == null)
+ {
+ return ajax;
+ }
+ try
+ {
+ MiddlePlatformDataQuery.logout(loginUser.getMiddlePlatformToken());
+ ajax.put("middlePlatformLogoutSuccess", true);
+ }
+ catch (IOException e)
+ {
+ ajax.put("middlePlatformLogoutSuccess", false);
+ ajax.put("middlePlatformLogoutMessage", e.getMessage());
+ }
+ tokenService.delLoginUser(loginUser.getToken());
+ AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginUser.getUsername(), Constants.LOGOUT, "退出成功"));
+ return ajax;
+ }
+
/**
* 账号密码登录
*
--
Gitblit v1.7.1