当前位置: 首页 > 知识库问答 >
问题:

在Spring云网关的Spring Security过滤链中插入自定义过滤器

陆光济
2023-03-14
 @Bean
 @Order(1)
 SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity serverHttpSecurity)
  throws Exception {
        ServerRequestCache requestCache = NoOpServerRequestCache.getInstance();
        WebFilter webFilter = new CustomWebFilter();
        serverHttpSecurity
          //.addFilterAt(webFilter, SecurityWebFiltersOrder.FIRST)
          .cors().and().headers()
          .frameOptions().disable()
          .and().requestCache().requestCache(requestCache)
          .and().csrf().disable()
          .authorizeExchange().pathMatchers("/**").authenticated()
          .and().oauth2Login()
          .and().oauth2Client()
          .and().oauth2ResourceServer().jwt();
     return serverHttpSecurity.build();
   }
.addFilterAt(webFilter, SecurityWebFiltersOrder.FIRST)
public class CustomWebFilter implements WebFilter {

    @Autowired
    URIconfig uRIconfig;
    final Logger logger = LoggerFactory.getLogger(CustomWebFilter.class);

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
      URI location = exchange.getRequest().getURI();
      uRIconfig.setLocation(location);
      logger.info("Custom Pre Filter executed");
       return chain.filter(exchange);
    }
 }

共有1个答案

南宫才艺
2023-03-14

通过将spring security filter chain的顺序更改为5,我解决了这个问题,并在我的自定义过滤器中添加了@order(ordered.highest_preasence)。现在,我的过滤器在我的keycloak登录页面之前调用,我可以添加我的自定义实现。以下是我所做的更改:

application.yml

spring:
  security:
    filter:
      order: 5

CustomWebFilter.java

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
@Slf4j
public class CustomWebFilter implements WebFilter {

  @Override
  public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
    log.info("My Custom Web Filter.");
    return chain.filter(exchange);
  }
}
 类似资料:
  • 我正在尝试将JHipster从使用Zuul迁移到Spring云网关。JHipster使用Eureka来查找路由,我相信我已经正确配置了Spring Cloud Gateway来查找路由并向它们传播访问令牌。下面是我的配置: 我创建了一个pull请求,以显示集成Spring Cloud Gateway后发生了什么变化。 https://github.com/mraible/jhipster-reac

  • 我们正在使用带有Spring Boot2和reactive webflux模块的Spring Cloud Gateway。有一个身份验证过滤器是为其中一个路由添加的。现在,如果我们抛出一个带有特定状态代码的RuntimeException,它实际上并不正常。早先这个auth检查是Spring中HandlerInterceptor的一部分,现在我们不能使用web模块和webflux(来自Spring

  • //有什么方法可以在我的自定义过滤器类中获得“admin,XY8382,basic” 我的筛选器类

  • 我试图调试我的应用程序,但调试器没有击中此代码块。这是我的自定义网关过滤器。 下面是这个过滤器的配置 当尝试发送请求时,此endpoint不会启动调试器或将日志打印到控制台。我在这里错过了什么。谢谢你。 如果我在主应用程序中创建AuthorizationHeaderFilter的bean,如下所示 应用程序在启动时引发此错误 我还为云api网关设置了日志级别来调试,下面是日志

  • 演示在网关追加一个header public class CustomFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 演示在网关追加heade

  • SOFARPC 提供了一套良好的可扩展性机制,为各个模块提供 SPI 的能力。 SOFARPC 对请求与响应的过滤链处理方式是通过多个过滤器 Filter 来进行具体的拦截处理,该部分可由用户自定义 Filter 扩展,自定义 Filter 的执行顺序在内置 Filter 之后。具体方式如下: Bolt Filter 新建自定义 Filter 。 public class CustomFilter