|
@@ -2,6 +2,7 @@ package com.inspur.smsb.gateway.filter;
|
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
|
+import com.fasterxml.jackson.databind.ObjectMapper;
|
|
|
import com.google.common.base.Strings;
|
|
import com.google.common.base.Strings;
|
|
|
import com.inspur.smsb.gateway.dto.KeycloakUserDto;
|
|
import com.inspur.smsb.gateway.dto.KeycloakUserDto;
|
|
|
import com.inspur.smsb.gateway.utils.HttpClientUtil;
|
|
import com.inspur.smsb.gateway.utils.HttpClientUtil;
|
|
@@ -18,6 +19,7 @@ import org.springframework.util.StringUtils;
|
|
|
import org.springframework.web.server.ServerWebExchange;
|
|
import org.springframework.web.server.ServerWebExchange;
|
|
|
import reactor.core.publisher.Mono;
|
|
import reactor.core.publisher.Mono;
|
|
|
|
|
|
|
|
|
|
+import javax.annotation.Resource;
|
|
|
import java.text.ParseException;
|
|
import java.text.ParseException;
|
|
|
import java.util.ArrayList;
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
@@ -45,6 +47,9 @@ public class WebFluxUserRequestInfoFilter implements GlobalFilter {
|
|
|
@Value("${keycloak.adminUserId}")
|
|
@Value("${keycloak.adminUserId}")
|
|
|
private String adminUserId;
|
|
private String adminUserId;
|
|
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private ObjectMapper objectMapper;
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
|
|
String wxAppletId = exchange.getRequest().getHeaders().getFirst("WxAppletId");
|
|
String wxAppletId = exchange.getRequest().getHeaders().getFirst("WxAppletId");
|
|
@@ -85,6 +90,27 @@ public class WebFluxUserRequestInfoFilter implements GlobalFilter {
|
|
|
if (Strings.isNullOrEmpty(token)) {
|
|
if (Strings.isNullOrEmpty(token)) {
|
|
|
return chain.filter(exchange);
|
|
return chain.filter(exchange);
|
|
|
}
|
|
}
|
|
|
|
|
+ // 由于漏洞扫描发现退出登陆后,token在一定时间范围内还是有效,故此处做黑名单限制,
|
|
|
|
|
+ // 前端退出登陆时调用下/keycloak/userLogout接口,本接口仅做token存入黑名单操作,不涉及具体业务
|
|
|
|
|
+// String logoutMd5 = DigestUtils.md5DigestAsHex(token.getBytes());
|
|
|
|
|
+// if(exchange.getRequest().getURI().getPath().contains("userLogout")) {
|
|
|
|
|
+// log.warn("user logout logout={}",logoutMd5);
|
|
|
|
|
+// ExpiredMapUtil.put(logoutMd5,logoutMd5,ExpiredMapUtil.CACHE_HOLD_TIME_5M);
|
|
|
|
|
+// }
|
|
|
|
|
+// if(Objects.nonNull(ExpiredMapUtil.get(logoutMd5))) {
|
|
|
|
|
+// ServerHttpResponse response = exchange.getResponse();
|
|
|
|
|
+// response.getHeaders().setContentType(MediaType.APPLICATION_JSON);
|
|
|
|
|
+// return response.writeWith(Mono.fromSupplier(() -> {
|
|
|
|
|
+// DataBufferFactory bufferFactory = response.bufferFactory();
|
|
|
|
|
+// try {
|
|
|
|
|
+// return bufferFactory.wrap(objectMapper.writeValueAsBytes(Response.buildFailure(String.valueOf(HttpStatus.PRECONDITION_FAILED.value()), "无访问权限")));
|
|
|
|
|
+// } catch (JsonProcessingException e) {
|
|
|
|
|
+// log.error("Error writing response", e);
|
|
|
|
|
+// return bufferFactory.wrap(new byte[0]);
|
|
|
|
|
+// }
|
|
|
|
|
+// }));
|
|
|
|
|
+// }
|
|
|
|
|
+
|
|
|
String realToken = token.replace("Bearer ", "");
|
|
String realToken = token.replace("Bearer ", "");
|
|
|
JWSObject jwsObject = JWSObject.parse(realToken);
|
|
JWSObject jwsObject = JWSObject.parse(realToken);
|
|
|
|
|
|