Spring Webflux –编写过滤器
Spring Webflux是Spring 5+的一部分提供的新的响应式Web框架。 在传统的基于Spring MVC的应用程序( Servlet Filter , HandlerInterceptor )中编写过滤器的方式与在基于Spring Webflux的应用程序中编写过滤器的方式非常不同,本文将简要介绍WebFlux的Filters方法。
方法1 – WebFilter
使用WebFilter的第一种方法会广泛影响所有端点,并涵盖以功能样式编写的 Webflux 端点以及使用注释样式编写的端点 。 Kotlin中的WebFilter如下所示:
@Beanfun sampleWebFilter(): WebFilter {return WebFilter { e: ServerWebExchange, c: WebFilterChain ->val l: MutableList<String> = e.getAttributeOrDefault(KEY, mutableListOf())l.add("From WebFilter")e.attributes.put(KEY, l)c.filter(e)}}
WebFilter添加了一个request属性,该属性的值是一个集合,在该属性中,过滤器仅将其拦截了请求的消息放入其中。
方法2 – HandlerFilterFunction
第二种方法更加集中,仅涵盖使用功能样式编写的端点 。 在这里,可以将特定的RouterFunction与过滤器连接起来,方法如下:
考虑以以下方式定义的Spring Webflux端点:
@Bean
fun route(): RouterFunction<*> = router {GET("/react/hello", { r ->ok().body(fromObject(Greeting("${r.attribute(KEY).orElse("[Fallback]: ")}: Hello")))POST("/another/endpoint", TODO())PUT("/another/endpoint", TODO())
})}
可以按照以下方式以高度集中的方式添加仅拦截这些API的HandlerFilterFunction:
fun route(): RouterFunction<*> = router {GET("/react/hello", { r ->ok().body(fromObject(Greeting("${r.attribute(KEY).orElse("[Fallback]: ")}: Hello")))})POST("/another/endpoint", TODO())PUT("/another/endpoint", TODO())}.filter({ r: ServerRequest, n: HandlerFunction<ServerResponse> ->val greetings: MutableList<String> = r.attribute(KEY).map { v ->v as MutableList<String>}.orElse(mutableListOf())greetings.add("From HandlerFilterFunction")r.attributes().put(KEY, greetings)n.handle(r)
})
请注意,无需明确说明Kotlin中的类型,我添加它只是为了清楚一些lambda表达式中的类型。
结论
WebFilter方法和HandlerFilterFunction与基于Spring WebMVC的使用Servlet Spec或HandlerInterceptor编写过滤器的方法有很大不同,本文总结了新方法- 我的git repo中提供了示例,详细介绍了这些示例。
翻译自: https://www.javacodegeeks.com/2017/12/spring-webflux-writing-filters.html
Spring Webflux –编写过滤器相关推荐
- Spring Webflux简介
1.Spring Webflux介绍 The original web framework included in the Spring Framework, Spring Web MVC, was ...
- 爸爸又给Spring MVC生了个弟弟叫Spring WebFlux
作者:李新杰 来自:编程新说 情景引入 很早之前,Java就火起来了,是因为它善于开发和处理网络方面的应用. Java有一个爱好,就是喜欢制定规范标准,但自己又不善于去实现. 反倒是一些服务提供商使用 ...
- Spring WebFlux和Spring Cloud开发响应式微服务
作者:Piotr Mińkowski 译者:大萝卜爱上小白菜 原文:https://dzone.com/articles/reactive-microservices-with-spring-webf ...
- spring react_使用Spring WebFlux构建React性REST API –第1部分
spring react 在本文中,我们将看到如何使用Spring WebFlux构建响应式REST API. 在进入React式API之前,让我们看看系统是如何发展的,传统REST实现遇到的问题以及 ...
- aws dynamodb_带有AWS DynamoDB的React式Spring Webflux
aws dynamodb AWS已经发布了Java版本2的AWS开发工具包 ,该开发工具包现在支持针对不同AWS服务的API调用的非阻塞IO. 在本文中,我将探讨如何使用AWS开发工具包2.x的Dyn ...
- corda_使用Spring WebFlux从Corda节点流式传输数据
corda 自上次发布以来已经有一段时间了,但我终于回来了! 由于我仍在我的项目中,因此我将再次撰写有关使用Corda的文章. 这次,我们将不再关注Corda,而是将Spring与Corda结合使用. ...
- 使用Spring WebFlux构建反应性REST API –第1部分
在本文中,我们将看到如何使用Spring WebFlux构建响应式REST API. 在进入反应式API之前,让我们看看系统是如何发展的,传统REST实现遇到的问题以及现代API的需求. 如果您查看从 ...
- 带有AWS DynamoDB的反应式Spring Webflux
AWS已经发布了Java版本2的AWS开发工具包 ,该开发工具包现在支持针对不同AWS服务的API调用的非阻塞IO. 在本文中,我将探讨如何使用AWS开发工具包2.x的DynamoDB API以及如何 ...
- 使用Spring WebFlux从Corda节点流式传输数据
自上次发布以来已经有一段时间了,但我终于回来了! 由于我仍在我的项目中,因此我将再次撰写有关使用Corda的文章. 这次,我们将不再关注Corda,而是将Spring与Corda结合使用. 更具体地说 ...
最新文章
- 从ACM班、百度到亚马逊,深度学习大牛李沐的开挂人生
- Android之——短信的备份与还原
- 浏览器兼容性 问题收集
- 关闭浏览器后退出登录_chdbits打不开了,关闭了吗
- c#10中的namespace
- 老男孩教育每日一题-2017-04-25:怎样产生一个子shell?
- LREC'22 | 机器翻译中细粒度领域自适应的数据集和基准实验
- 【渝粤教育】广东开放大学 生产与运作管理 形成性考核 (36)
- ios开发学习-指示器(HUD)效果源码分享
- AI安全 - 华为白皮书《AI Security White Paper》
- Tac-Simur: Tactic-based Simulative Visual Analytics of Table Tennis
- 干货 | 携程度假数据治理之数据标准管理实践
- 修改判断名字重复,保证名字唯一
- 2022年系统分析师综合知识考点整理
- 慕课编译原理(第十章.构造优先关系表)
- 清华大学计算机系刘景财,2017年清华大学计算机系硕士录取名单
- Java正则表达式校验数字、字母及特殊字符
- 计算机视觉方向好中的期刊有哪些?
- 【python爬虫】scrapy框架案例实现数据保存入MySQL
- 面料防静电测试方法指南
热门文章
- 在MySQL的InnoDB存储引擎中count(*)函数的优化
- JSP2.0中的表达式语言(EL表达式)
- java异常捕获的一点感悟
- 既然参与,那就做好,我相信我们是最棒的!!!
- 第6章循环结构(二)
- SSM整合简单登录案例
- 对数据进行插入操作并且获取主键的值
- excel如何生成mysql的sql语句_excel 批量生成SQL语句
- Centos7安装apt-get 在centos下用yum install xxx 不是使用apt-get
- 2小时学习Spring Boot 2019版本 代码一样推送至github上面去