【发布时间】:2020-08-06 18:37:11
【问题描述】:
我正在尝试添加网关过滤器,但由于某种原因,应用程序似乎无法找到我创建的自定义过滤器。这是我得到的错误。
我的代码如下所示:
Application.yml
spring:
cloud:
gateway:
routes:
- id: securityService
uri: http://localhost:8083
predicates:
- Method=POST
- Path=/auth/**
filters:
- MyGatewayFilterFactory
MyGatewayFilterFactory
package com.gateway.cloudstreamproducerrabbitmq;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.util.List;
@Component
public class MyGatewayFilterFactory extends AbstractGatewayFilterFactory<MyGatewayFilterFactory.Config> {
public MyGatewayFilterFactory() {
super(Config.class);
}
private boolean isAuthorizationValid(String authorizationHeader) {
boolean isValid = true;
// Logic for checking the value
return isValid;
}
private Mono<Void> onError(ServerWebExchange exchange, String err, HttpStatus httpStatus) {
ServerHttpResponse response = exchange.getResponse();
response.setStatusCode(httpStatus);
return response.setComplete();
}
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
ServerHttpRequest request = exchange.getRequest();
System.out.println("Test");
if (!request.getHeaders().containsKey("Authorization")) {
return this.onError(exchange, "No Authorization header", HttpStatus.UNAUTHORIZED);
};
String authorizationHeader = request.getHeaders().get("Authorization").get(0);
if (!this.isAuthorizationValid(authorizationHeader)) {
return this.onError(exchange, "Invalid Authorization header", HttpStatus.UNAUTHORIZED);
}
ServerHttpRequest modifiedRequest = exchange.getRequest().mutate().
header("secret", "RANDOMRANDOMRANDOM").
build();
return chain.filter(exchange.mutate().request(modifiedRequest).build());
};
}
public static class Config {
// Put the configuration properties
}
}
如果我忘记提供一些信息,请告诉我。我会更新这篇文章。
我之前没有使用过过滤器,所以我还是新手。
【问题讨论】:
标签: java spring-boot filter spring-cloud gateway