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..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 @@ -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; @@ -142,20 +142,21 @@ 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) { - } - } - } // 登录保存缓存 StpUtil.logout(); - //删除缓存 - return AjaxResult.success(); + if (StringUtils.isNotBlank(logoutUrl)) { + return AjaxResult.success(new ProxyInfo() {{ + setType("redirect"); + setUrl(logoutUrl); + }}); + } else { + String loginPath = "login"; + return AjaxResult.success(new ProxyInfo() {{ + setType("local"); + setUrl(loginPath); + }}); + + } } @@ -285,10 +286,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 +307,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;