fix(权限定制化开发): GitLink平台与若依微服务登录态打通

网关进行用户登录态判断时,同步检查Header的Authorization字段中的token是否为GitLink登录用户的Token

关联Issue:https://www.gitlink.org.cn/Gitlink/forgeplus/issues/2664
This commit is contained in:
otto 2023-04-21 10:54:18 +08:00
parent d1d3361ed7
commit f2b7ff135d
1 changed files with 29 additions and 7 deletions

View File

@ -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<R>) () -> remoteUserService.checkGitLinkUserLogin(token, SecurityConstants.INNER));
try {
R<Boolean> feginResult = (R<Boolean>) 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<R>) () -> remoteUserService.getSysUserTokenByGitLinkCookie(cookie, SecurityConstants.INNER));