Browse Source

feat: 调整登录逻辑

master_tdsql
hxh 7 months ago
parent
commit
1cf0c83e23
  1. 40
      shuili-admin/src/main/java/com/kms/web/controller/system/SysLoginController.java
  2. 35
      shuili-admin/src/main/java/com/kms/web/utils/WaterRequestUtil.java

40
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<List<MenuDto>> menusFuture = CompletableFuture.supplyAsync(() -> portalMenu(token), executor);
CompletableFuture<SysUser> 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<List<MenuDto>> menusFuture = CompletableFuture.supplyAsync(() -> portalMenu(accessToken), executor);
CompletableFuture<SysUser> userFuture = CompletableFuture.supplyAsync(() -> innerLogin(accessToken), executor);
CompletableFuture.allOf(menusFuture, userFuture).join();
List<MenuDto> 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);
}

35
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<WaterToken> waterResult = JSON.parseObject(body, new TypeReference<WaterResultV2<WaterToken>>() {
});
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;

Loading…
Cancel
Save