|
|
@@ -23,6 +23,8 @@ import lombok.AllArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springblade.core.jwt.JwtUtil;
|
|
|
+import org.springblade.core.jwt.props.JwtProperties;
|
|
|
+import org.springblade.core.launch.constant.TokenConstant;
|
|
|
import org.springblade.gateway.props.AuthProperties;
|
|
|
import org.springblade.gateway.provider.AuthProvider;
|
|
|
import org.springblade.gateway.provider.RequestProvider;
|
|
|
@@ -51,14 +53,17 @@ import java.nio.charset.StandardCharsets;
|
|
|
public class AuthFilter implements GlobalFilter, Ordered {
|
|
|
private final AuthProperties authProperties;
|
|
|
private final ObjectMapper objectMapper;
|
|
|
+ private final JwtProperties jwtProperties;
|
|
|
|
|
|
@Override
|
|
|
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
|
|
|
+ //校验 Token 放行
|
|
|
String originalRequestUrl = RequestProvider.getOriginalRequestUrl(exchange);
|
|
|
String path = exchange.getRequest().getURI().getPath();
|
|
|
if (isSkip(path) || isSkip(originalRequestUrl)) {
|
|
|
return chain.filter(exchange);
|
|
|
}
|
|
|
+ //校验 Token 合法性
|
|
|
ServerHttpResponse resp = exchange.getResponse();
|
|
|
String headerToken = exchange.getRequest().getHeaders().getFirst(AuthProvider.AUTH_KEY);
|
|
|
String paramToken = exchange.getRequest().getQueryParams().getFirst(AuthProvider.AUTH_KEY);
|
|
|
@@ -68,9 +73,18 @@ public class AuthFilter implements GlobalFilter, Ordered {
|
|
|
String auth = StringUtils.isBlank(headerToken) ? paramToken : headerToken;
|
|
|
String token = JwtUtil.getToken(auth);
|
|
|
Claims claims = JwtUtil.parseJWT(token);
|
|
|
- if (claims == null) {
|
|
|
+ if (token == null || claims == null) {
|
|
|
return unAuth(resp, "请求未授权");
|
|
|
}
|
|
|
+ //判断 Token 状态
|
|
|
+ if (jwtProperties.getState()) {
|
|
|
+ String tenantId = String.valueOf(claims.get(TokenConstant.TENANT_ID));
|
|
|
+ String userId = String.valueOf(claims.get(TokenConstant.USER_ID));
|
|
|
+ String accessToken = JwtUtil.getAccessToken(tenantId, userId, token);
|
|
|
+ if (!token.equalsIgnoreCase(accessToken)) {
|
|
|
+ return unAuth(resp, "令牌已失效");
|
|
|
+ }
|
|
|
+ }
|
|
|
return chain.filter(exchange);
|
|
|
}
|
|
|
|