From 1cf0c83e2356daeffaaa1908b8c35fcb6d4b2c18 Mon Sep 17 00:00:00 2001 From: hxh Date: Wed, 18 Sep 2024 14:34:11 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E8=B0=83=E6=95=B4=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysLoginController.java | 40 +++++++++---------- .../com/kms/web/utils/WaterRequestUtil.java | 35 +++++++++++++++- 2 files changed, 54 insertions(+), 21 deletions(-) diff --git a/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java b/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java index 73ad7210..ec456b45 100644 --- a/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java +++ b/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java @@ -47,7 +47,6 @@ import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.view.RedirectView; import javax.annotation.Resource; -import javax.annotation.Resources; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -91,7 +90,8 @@ public class SysLoginController extends BaseController { @Value("${water.portalUrl:}") private String portalUrl; - + @Value("${water.logoutUrl:}") + public String logoutUrl; @Resource(name = "commonPool") private Executor executor; @@ -141,21 +141,14 @@ public class SysLoginController extends BaseController { @PostMapping("/logout") @SaCheckLogin - public AjaxResult logout() { - SysUser sysUser = UserUtils.getUser(); - if (sysUser != null) { - String token = permissionService.getPortalToken(sysUser.getId()); - if (StringUtils.isNotBlank(token)) { - try { - waterRequestUtil.logout(token); - } catch (Exception ignore) { - } - } - } + public ModelAndView logout() { // 登录保存缓存 StpUtil.logout(); - //删除缓存 - return AjaxResult.success(); + if (StringUtils.isNotBlank(logoutUrl)) { + return new ModelAndView(new RedirectView(logoutUrl)); + } else { + return new ModelAndView(new RedirectView("/login")); + } } @@ -285,10 +278,17 @@ public class SysLoginController extends BaseController { @GetMapping("/signOnLogin") public ModelAndView signOnLogin(HttpServletRequest request, HttpServletResponse response, + @RequestParam(name = "code") String code, @RequestParam(name = "page", required = false) String page, @RequestParam(name = "token") String token) throws IOException { - CompletableFuture> menusFuture = CompletableFuture.supplyAsync(() -> portalMenu(token), executor); - CompletableFuture userFuture = CompletableFuture.supplyAsync(() -> innerLogin(token), executor); + if (StringUtils.isNotBlank(code)) { + token = waterRequestUtil.getToken(code); + } else if (StringUtils.isBlank(token)) { + throw new BaseException("token不能为空"); + } + String accessToken = token; + CompletableFuture> menusFuture = CompletableFuture.supplyAsync(() -> portalMenu(accessToken), executor); + CompletableFuture userFuture = CompletableFuture.supplyAsync(() -> innerLogin(accessToken), executor); CompletableFuture.allOf(menusFuture, userFuture).join(); List menus = menusFuture.join(); SysUser simpleUser = userFuture.join(); @@ -299,9 +299,9 @@ public class SysLoginController extends BaseController { permissionService.setPortalToken(simpleUser.getId(), token); StpUtil.login(simpleUser.getId()); StpUtil.getSession().set("jianwei-user", simpleUser); - String accessToken = StpUtil.getTokenValue(); - log.info("登录成功,用户[{}]token:{}", simpleUser.getId(), accessToken); - RedirectView redirectView = new RedirectView(redirect + "?token=" + accessToken + "&page=" + page); + String innerToken = StpUtil.getTokenValue(); + log.info("登录成功,用户[{}]token:{}", simpleUser.getId(), innerToken); + RedirectView redirectView = new RedirectView(redirect + "?token=" + innerToken + "&page=" + page); return new ModelAndView(redirectView); } diff --git a/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java b/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java index ac63f3e0..aa4a74ed 100644 --- a/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java +++ b/shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java @@ -37,11 +37,19 @@ public class WaterRequestUtil { //单点登录密钥 @Value("${water.singOnAppsecret:}") public String singOnAppsecret; + @Value("${water.singOnUrl:}") public String singOnUrl; @Value("${water.logoutUrl:}") public String logoutUrl; + @Value("${water.accessTokenUrl:}") + public String accessTokenUrl; + @Value("${water.accessTokenServiceId:}") + public String accessTokenServiceId; + @Value("${water.accessTokenAppsecret:}") + public String accessTokenAppsecret; + //验证用户登录 @Value("${water.userUrl:}") public String userUrl; @@ -236,6 +244,31 @@ public class WaterRequestUtil { return waterResult; } + public String getToken(String code) { + long startTime = System.currentTimeMillis(); + log.info("--------请求统一门户获取token,请求地址为:{}", accessTokenUrl); + HttpRequest get = createGet(accessTokenUrl, accessTokenServiceId, accessTokenAppsecret); + String body; + try (HttpResponse response = get.header("Authorization", code) + .execute()) { + body = response.body(); + } + long endTime = System.currentTimeMillis(); + log.info("-------请求统一门户获取token,耗时{}毫秒,token:[{}]", endTime - startTime, body); + WaterResultV2 waterResult = JSON.parseObject(body, new TypeReference>() { + }); + isSuccess(waterResult); + return waterResult.getData().getAccessToken(); + } + + @Data + public static class WaterToken { + private String accessToken; + private String tokenType; + private String refreshToken; + private String expiresIn; + } + @Data public static class WaterUser { private WaterUserInfo user; @@ -331,7 +364,7 @@ public class WaterRequestUtil { .execute()) { body = response.body(); } - log.info("--------请求获取门户用户信息" ); + log.info("--------请求获取门户用户信息"); WaterResult waterResult = JSONObject.parseObject(body, WaterResult.class); isSuccess(waterResult); return waterResult; From 0501a585e9332391f9d35152bc3727e4cb2a214b Mon Sep 17 00:00:00 2001 From: hxh Date: Wed, 18 Sep 2024 14:57:05 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat:=20=E4=BF=AE=E6=94=B9=E7=99=BB?= =?UTF-8?q?=E5=87=BA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/system/SysLoginController.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java b/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java index ec456b45..5003c000 100644 --- a/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java +++ b/shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java @@ -141,13 +141,21 @@ public class SysLoginController extends BaseController { @PostMapping("/logout") @SaCheckLogin - public ModelAndView logout() { + public AjaxResult logout() { // 登录保存缓存 StpUtil.logout(); if (StringUtils.isNotBlank(logoutUrl)) { - return new ModelAndView(new RedirectView(logoutUrl)); + return AjaxResult.success(new ProxyInfo() {{ + setType("redirect"); + setUrl(logoutUrl); + }}); } else { - return new ModelAndView(new RedirectView("/login")); + String loginPath = "login"; + return AjaxResult.success(new ProxyInfo() {{ + setType("local"); + setUrl(loginPath); + }}); + } }