diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java index 72c842fb4..4a8a8b1fa 100644 --- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java +++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java @@ -62,9 +62,10 @@ public class AuthFilter implements GlobalFilter, Ordered { return chain.filter(exchange); } String token; + String gitLinkCookie = getGitLinkRequestCookie(request); //判断Cookie是否包含Gitlink平台携带关键字 - if (isGitLinkRequest(request)) { - token = getGitLinkToken(request); + if (gitLinkCookie != null) { + token = getGitLinkToken(gitLinkCookie); //若是Gitlink平台请求,手动在Header中添加authorization addHeader(mutate, TokenConstants.AUTHENTICATION, token); } else { @@ -98,12 +99,34 @@ public class AuthFilter implements GlobalFilter, Ordered { return chain.filter(exchange.mutate().request(mutate.build()).build()); } - private boolean isGitLinkRequest(ServerHttpRequest request) { + private String genCookieByToken(String token) { + return String.format("autologin_trustie=%s;", token); + } + + private String getGitLinkRequestCookie(ServerHttpRequest request) { String cookie = request.getHeaders().getFirst(TokenConstants.Cookie); if (cookie != null && cookie.contains(TokenConstants.GitLink_Token_Key)) { - return true; + return cookie; } - return false; + String token = request.getHeaders().getFirst(TokenConstants.AUTHENTICATION); + if (token != null) { + // 网关采用异步架构,所以此处需要通过异步请求获取本系统Token + Future future = executorService.submit((Callable) () -> remoteUserService.checkGitLinkUserLogin(token, SecurityConstants.INNER)); + try { + R feginResult = (R) future.get(); + if (StringUtils.isNull(feginResult) + || StringUtils.isNull(feginResult.getData()) + || R.FAIL == feginResult.getCode() + || !feginResult.getData() + ) { + return null; + } + return genCookieByToken(token); + } catch (Exception e) { + return null; + } + } + return null; } private void addHeader(ServerHttpRequest.Builder mutate, String name, Object value) { @@ -155,8 +178,7 @@ public class AuthFilter implements GlobalFilter, Ordered { return token; } - private String getGitLinkToken(ServerHttpRequest request) { - String cookie = request.getHeaders().getFirst(TokenConstants.Cookie); + private String getGitLinkToken(String cookie) { if (StringUtils.isNotEmpty(cookie)) { // 网关采用异步架构,所以此处需要通过异步请求获取本系统Token Future future = executorService.submit((Callable) () -> remoteUserService.getSysUserTokenByGitLinkCookie(cookie, SecurityConstants.INNER));