SpringCloud Webflux过滤器增加header传递方式

 更新时间:2023年02月14日 09:54:46   作者:低头确望水中月亮  
这篇文章主要介绍了SpringCloud Webflux过滤器增加header传递方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

Webflux过滤器增加header传递

webflux 使用异步非阻塞的方式,传递Header还需要我们自己增加代码传递:

定义过滤器,便携下面的配置可以尝试一下header的传递到后面的服务中。

@Component
public class AuthorizationFilter implements WebFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        ServerHttpRequest mutatedRequest = exchange.getRequest().mutate().header(HttpHeaders.AUTHORIZATION, "Bearer " + authHeader).build();
        ServerWebExchange mutatedExchange = exchange.mutate().request(mutatedRequest).build();
        return chain.filter(mutatedExchange);
    }
}
 
 
## Kotlin 的方式
@Component
class AuthorizationFilter : WebFilter {
    override fun filter(exchange: ServerWebExchange, chain: WebFilterChain): Mono<Void> {
        val mutatedRequest = exchange.request.mutate().header(HttpHeaders.AUTHORIZATION, "Bearer $authHeader").build()
        val mutatedExchange = exchange.mutate().request(mutatedRequest).build()
        return chain.filter(mutatedExchange)
    }
}

Webflux过滤器使用

下面是简单处理token的例子

@Component
@Order(value = 2)
public class AuthFilter implements WebFilter {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        ServerHttpRequest request =  exchange.getRequest();
        //ServerHttpResponse response =  exchange.getResponse();

        String token = request.getHeaders().getFirst("token");
        if(null == token){
                /*http头中没有appKey,修改请求的目标url为/auth/error
                  request.mutate返回一个请求构建器(builder design pattern),path方法修改请求的url,build方法返回新的request
               */
            ServerHttpRequest authErrorReq = request.mutate().path("/auth/error").build();
            //erverWebExchange.mutate类似,构建一个新的ServerWebExchange
            ServerWebExchange authErrorExchange = exchange.mutate().request(authErrorReq).build();
            return chain.filter(authErrorExchange);
        } else{ 
            return chain.filter(exchange);
        }
    }
}

webFlux将指定的错误信息通过json格式返回给前端

exchange.getResponse().writeWith(Flux.just(exchange.getResponse().bufferFactory().wrap(JsonUtil.toJson(new BaseErrorVO().fail(e.getMessageCode(),e.getSystemMessage())).getBytes())));

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 关于Linux服务器配置java环境遇到的问题小结

    关于Linux服务器配置java环境遇到的问题小结

    这篇文章主要介绍了关于Linux服务器配置java环境遇到的问题小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • JavaWeb文件上传下载实例讲解(酷炫的文件上传技术)

    JavaWeb文件上传下载实例讲解(酷炫的文件上传技术)

    在Web应用系统开发中,文件上传功能是非常常用的功能,今天来主要讲讲JavaWeb中的文件上传功能的相关技术实现,本文给大家介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-11-11
  • JavaWeb中Struts2拦截器深入分析(一)

    JavaWeb中Struts2拦截器深入分析(一)

    这篇文章主要为大家详细介绍了JavaWeb中Struts2拦截器的功能,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • 注册中心配置了spring security后客户端启动报错

    注册中心配置了spring security后客户端启动报错

    这篇文章主要为大家介绍了注册中心配置了spring security后客户端启动报错问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Spring Boot2深入分析解决java.lang.ArrayStoreException异常

    Spring Boot2深入分析解决java.lang.ArrayStoreException异常

    这篇文章介绍了Spring Boot2深入分析解决java.lang.ArrayStoreException异常的方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • Spring针对AOP详细讲解

    Spring针对AOP详细讲解

    Spring是一个广泛应用的框架,SpringAOP则是Spring提供的一个标准易用的aop框架,依托Spring的IOC容器,提供了极强的AOP扩展增强能力,对项目开发提供了极大地便利
    2022-06-06
  • java 异常被catch后 将会继续执行的操作

    java 异常被catch后 将会继续执行的操作

    这篇文章主要介绍了java 异常被catch后 将会继续执行的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Java静态代码块作用及执行顺序解析

    Java静态代码块作用及执行顺序解析

    这篇文章主要介绍了Java静态代码块作用及执行顺序解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • java中a=a+1和a+=1的区别介绍

    java中a=a+1和a+=1的区别介绍

    这篇文章主要介绍了java中a=a+1和a+=1的区别,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • Spring Cloud升级最新Finchley版本的所有坑

    Spring Cloud升级最新Finchley版本的所有坑

    这篇文章主要介绍了Spring Cloud升级最新Finchley版本的所有坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08

最新评论