Spring Cloud Gateway + JWT 实现登录认证
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.io.buffer.DataBufferUtils;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.nio.charset.StandardCharsets;
public class AuthFilter implements GlobalFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
// 获取请求头信息
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
// 验证token是否存在
if (token == null || token.isEmpty()) {
// 如果token不存在,返回未授权的响应
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(HttpStatus.UNAUTHORIZED);
response.getHeaders().set("Content-Type", "application/json;charset=UTF-8");
String errorMsg = "{\"code\": 401, \"message\": \"未授权访问\"}";
DataBufferUtils.write(response.bufferFactory().wrap(errorMsg.getBytes(StandardCharsets.UTF_8)), response.getBody());
return response.setComplete();
}
// 如果token存在,继续请求
return chain.filter(exchange);
}
}
这段代码定义了一个名为AuthFilter
的类,实现了GlobalFilter
接口。它检查每个请求是否包含Authorization
头信息,如果不存在,则返回状态码为401的未授权响应。这是一个简单的权限验证示例,实际应用中需要根据JWT的解析和验证逻辑进行相应的扩展。
评论已关闭