1.开发登录接口
2.处理Token过期
@Slf4j
@Component
public class AuthFilter implements GlobalFilter {
@Autowired
private JwtUtils jwtUtil;
@Autowired
private JwtConfig jwtConfig;
@Autowired
private ObjectMapper objectMapper;
private AntPathMatcher antPathMatcher = new AntPathMatcher();
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
String uri = exchange.getRequest().getURI().getPath();
for (String path : jwtConfig.getSkipUrl()) {
if(antPathMatcher.match(path, uri)) {
return chain.filter(exchange);
}
}
String token = exchange.getRequest().getHeaders().getFirst("Authorization");
if(token == null) {
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return authError(exchange.getResponse(), ResultCode.UNAUTHORIZED.getCode(), ResultCode.UNAUTHORIZED.getMessage());
}
try{
token = token.substring(7);
jwtUtil.parseToken(token);
}catch (Exception e) {
log.error("token验证异常:",e);
exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
return authError(exchange.getResponse(), ResultCode.UNAUTHORIZED.getCode(),ResultCode.UNAUTHORIZED.getMessage());
}
return chain.filter(exchange);
}