forked from Gitlink/microservices
fix(权限定制化开发): GitLink平台与若依微服务登录态打通
网关进行用户登录态判断时,同步检查Header的Authorization字段中的token是否为GitLink登录用户的Token 关联Issue:https://www.gitlink.org.cn/Gitlink/forgeplus/issues/2664
This commit is contained in:
parent
d1d3361ed7
commit
f2b7ff135d
|
|
@ -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));
|
||||
|
|
|
|||
Loading…
Reference in New Issue