From df36ad80b626e183cd0b121840df62a26d4e8f79 Mon Sep 17 00:00:00 2001 From: OnEvent Date: Mon, 12 May 2025 00:07:01 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=20SSO=20?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E4=B8=8E=E6=8E=A5=E5=8F=A3=E7=9A=84=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将返回值统一调整为 AjaxJson 格式,以提高错误处理的一致性。 - 增加参数验证逻辑,确保单点登录配置中必要字段的完整性。 - 添加更详尽的错误提示信息。 --- .../module/sso/controller/SsoController.java | 37 ++++++++++++++++--- .../zfile/module/sso/service/SsoService.java | 26 ++++++++----- 2 files changed, 48 insertions(+), 15 deletions(-) diff --git a/src/main/java/im/zhaojun/zfile/module/sso/controller/SsoController.java b/src/main/java/im/zhaojun/zfile/module/sso/controller/SsoController.java index ac9f512..ba785da 100644 --- a/src/main/java/im/zhaojun/zfile/module/sso/controller/SsoController.java +++ b/src/main/java/im/zhaojun/zfile/module/sso/controller/SsoController.java @@ -2,6 +2,7 @@ package im.zhaojun.zfile.module.sso.controller; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.util.IdUtil; +import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.URLUtil; import im.zhaojun.zfile.core.util.AjaxJson; import im.zhaojun.zfile.module.sso.model.entity.SsoConfig; @@ -14,6 +15,11 @@ import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.view.RedirectView; +/** + * 单点登录接口 + * + * @author OnEvent + */ @Slf4j @Tag(name = "单点登录") @RestController @@ -26,25 +32,46 @@ class SsoController @PostMapping("/provider") public AjaxJson insertProvider(@RequestBody SsoConfig provider) { - return AjaxJson.getSuccess(ssoService.insertProvider(provider)); + if ( + StrUtil.isEmpty(provider.getProvider()) || + StrUtil.isEmpty(provider.getClientId()) || + StrUtil.isEmpty(provider.getClientSecret()) || + StrUtil.isEmpty(provider.getScope()) || + StrUtil.isEmpty(provider.getBindingField()) + ) + { + return AjaxJson.getError("缺少必要参数, 请检查配置"); + } + + if ( + (StrUtil.isEmpty(provider.getAuthUrl()) || + StrUtil.isEmpty(provider.getTokenUrl()) || + StrUtil.isEmpty(provider.getUserInfoUrl())) && + StrUtil.isEmpty(provider.getWellKnownUrl()) + ) + { + return AjaxJson.getError("各项端点配置和 Well-Known 配置必须填写其中一个, 请检查配置"); + } + + return ssoService.insertProvider(provider); } @DeleteMapping("/provider/{provider}") public AjaxJson deleteProvider(@PathVariable String provider) { - return AjaxJson.getSuccess(ssoService.deleteProvider(provider)); + return ssoService.deleteProvider(provider); } @PutMapping("/provider") public AjaxJson modifyProvider(@RequestBody SsoConfig provider) { - return AjaxJson.getSuccess(ssoService.modifyProvider(provider)); + return ssoService.modifyProvider(provider); } @GetMapping("/provider/{provider}") - public AjaxJson getProvider(@PathVariable String provider) + public AjaxJson getProvider(@PathVariable String provider) { - return AjaxJson.getSuccessData(ssoService.getProvider(provider)); + return ssoService.getProvider(provider); } @GetMapping("/{provider}/login") diff --git a/src/main/java/im/zhaojun/zfile/module/sso/service/SsoService.java b/src/main/java/im/zhaojun/zfile/module/sso/service/SsoService.java index bb0138c..7ed22a1 100644 --- a/src/main/java/im/zhaojun/zfile/module/sso/service/SsoService.java +++ b/src/main/java/im/zhaojun/zfile/module/sso/service/SsoService.java @@ -8,6 +8,7 @@ import cn.hutool.core.util.URLUtil; import cn.hutool.http.Header; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSONUtil; +import im.zhaojun.zfile.core.util.AjaxJson; import im.zhaojun.zfile.module.sso.mapper.SsoConfigMapper; import im.zhaojun.zfile.module.sso.model.entity.SsoConfig; import im.zhaojun.zfile.module.sso.model.response.TokenResponse; @@ -38,9 +39,9 @@ public class SsoService * 如果系统自动获取的配置无法解析,则会失败
* * @param provider 要插入的单点登录(SSO)提供程序配置对象 - * @return 表示操作结果的字符串:"success"、"error"、"错误信息" + * @return 表示操作结果的字符串 */ - public String insertProvider(SsoConfig provider) + public AjaxJson insertProvider(SsoConfig provider) { if (!StrUtil.isEmpty(provider.getWellKnownUrl())) { @@ -52,27 +53,28 @@ public class SsoService var userInfoUrl = wellKnown.getStr("userinfo_endpoint"); if (StrUtil.isEmpty(authUrl) || StrUtil.isEmpty(tokenUrl) || StrUtil.isEmpty(userInfoUrl)) { - return "Well-Known 信息错误, 自动发现配置失败, 请检查配置或直接填写全部配置"; + return AjaxJson.getError("Well-Known 信息错误, 自动发现配置失败, 请检查配置或直接填写全部配置"); } provider.setAuthUrl(authUrl); provider.setTokenUrl(tokenUrl); provider.setUserInfoUrl(userInfoUrl); } + provider.setEnabled(true); var result = ssoConfigMapper.insert(provider); - return result > 0 ? "success" : "error"; + return result > 0 ? AjaxJson.getSuccess() : AjaxJson.getError("插入失败, 请检查配置"); } - public String deleteProvider(String provider) + public AjaxJson deleteProvider(String provider) { var result = ssoConfigMapper.deleteById(provider); - return result > 0 ? "success" : "error"; + return result > 0 ? AjaxJson.getSuccess() : AjaxJson.getError("删除失败, 请检查配置"); } - public String modifyProvider(SsoConfig provider) + public AjaxJson modifyProvider(SsoConfig provider) { var result = ssoConfigMapper.updateById(provider); - return result > 0 ? "success" : "error"; + return result > 0 ? AjaxJson.getSuccess() : AjaxJson.getError("修改失败, 请检查配置"); } /** @@ -82,11 +84,15 @@ public class SsoService * @param provider 要获取的单点登录提供商的名称 * @return 指定的单点登录服务商配置信息 */ - public SsoConfig getProvider(String provider) + public AjaxJson getProvider(String provider) { var result = ssoConfigMapper.findByProvider(provider); + if (ObjectUtil.isNull(result)) + { + return AjaxJson.getError("单点登录厂商配置不存在, 请检查配置"); + } result.setClientSecret(StrUtil.hide(result.getClientSecret(), 5, result.getClientSecret().length() - 5)); - return result; + return AjaxJson.getSuccessData(result); } /**