application.yml ---
spring:
cloud:
gateway:
routes:
- id: test_route
uri: https://api.rangon.pi
predicates:
- Path=/api/staticdata/rattlefeed*
filters:
- AddRequestHeader=X-Y-Host, rangon
- TestGatewayFilter=admin, XY8382, basic
//有什么方法可以在我的自定义过滤器类中获得“admin,XY8382,basic”
我的筛选器类
@Component
public class TestGatewayFilter implements
GatewayFilterFactory<TestGatewayFilter.Config> {
@Override
public GatewayFilter apply(Config config) {
// grab configuration from Config object
return (exchange, chain) -> {
Route r = (Route) exchange.getAttributes().get(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
Route route = exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
// ServerWebExchange route =
// exchange.getAttribute(ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR);
// List<GatewayFilter> list = r.getFilters();
GatewayFilter gwf = r.getFilters().get(r.getFilters().size() - 1);
Builder builder = exchange.getRequest().mutate();
// use builder to manipulate the request
return chain.filter(exchange.mutate().build());
};
}
public Config newConfig() {
Config c = new Config();
return c;
}
public static class Config {
// Put the configuration properties for your filter here
}
}
有两种方法可以在配置文件中定义过滤器的参数,在本例中,我将使用application.yml
首先,可以使用args
关键字定义参数的键值列表:
spring:
cloud:
gateway:
routes:
- id: test_route
uri: https://myapi.com
filters:
- name: TestLoggingFilter
args:
value: ThisIsATest
第二种形式是使用内联ARG:
spring:
cloud:
gateway:
routes:
- id: test_route
uri: https://myapi.com
filters:
- TestLoggingFilter=ThisIsATest
package com.es.filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.GatewayFilterFactory;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.List;
@Component
public class TestLoggingFilter implements GatewayFilterFactory<TestLoggingFilter.Config> {
private static final Logger LOG = LoggerFactory.getLogger(TestLoggingFilter.class);
private static final String VALUE = "value";
@Override
public Config newConfig() {
return new Config();
}
@Override
public List<String> shortcutFieldOrder() {
return Collections.singletonList(VALUE);
}
@Override
public GatewayFilter apply(Config config) {
return (exchange, chain) -> {
LOG.info("Filter enabled with value: " + config.value);
return chain.filter(exchange);
};
}
public static class Config {
private String value;
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
}
我使用的是spring ldap和spring boot starter安全性的组合。我已经配置了基本的设置,但仍在传递用户名和密码以进行身份验证。它总是试图验证应用程序中指定的默认凭据。财产。不管怎样,通过传递登录表单中给出的信誉,是否可以正确地做到这一点。 @覆盖受保护的无效配置(AuthenticationManagerBuilder auth)引发异常{ }
我还在研究spring batch,遇到了一个需要将jobParameter传递给定制bean的场景。作业参数包含文件的路径。 这已经包含在读取器的步骤范围中,这里没有包含。 问题是。当类被实例化时,传递给bean的值是“file:#{jobparameters['path'}/filename”,而不是调用作业时传递的jobParameter的值。这让我很困惑,因为我在multiResource
我是一个相当新的反应,这是一个我正在努力解决的问题。
我正在尝试通过@Autowoe注释将过滤器JWTLoginFilter传递给WebSecurityConfig WebSecurityConfirerAdapter。当JWTLoginFilter尝试从WebSecurityConfig获取Auth验证管理器时,问题就出现了。 当我启动服务器时,我得到这个错误: 描述: 应用程序上下文中某些bean的依赖关系形成一个循环: JWTLoginFilt
我试图调试我的应用程序,但调试器没有击中此代码块。这是我的自定义网关过滤器。 下面是这个过滤器的配置 当尝试发送请求时,此endpoint不会启动调试器或将日志打印到控制台。我在这里错过了什么。谢谢你。 如果我在主应用程序中创建AuthorizationHeaderFilter的bean,如下所示 应用程序在启动时引发此错误 我还为云api网关设置了日志级别来调试,下面是日志