正如我们所知,在泽西,我们有前匹配过滤器和后匹配过滤器。
我想知道如何在webflow应用程序中使用WebFilter获得类似的行为。
似乎WebFilter有点像一个预匹配过滤器,无论资源@RestController找到与否,它肯定会被执行。
我的过滤器像这样(从Spring执行器中的指标过滤器复制):
@Component
@Order(100)
public class AppFilter1 implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
return chain.filter(exchange).compose((call) -> filter(exchange, call));
}
private Publisher<Void> filter(ServerWebExchange exchange, Mono<Void> call) {
System.out.println("Start AppFilter1 in thread:" + Thread.currentThread().getId() + "..........");
ServerHttpResponse response = exchange.getResponse();
return call.doOnSuccess((done) -> success(exchange)).doOnError((cause) -> {
if (response.isCommitted()) {
error(exchange, cause);
} else {
response.beforeCommit(() -> {
error(exchange, cause);
return Mono.empty();
});
}
});
}
private void success(ServerWebExchange exchange) {
System.out.println("End AppFilter1 in thread:" + Thread.currentThread().getId() + "..............");
}
private void error(ServerWebExchange exchange, Throwable cause) {
System.out.println("End AppFilter1 with Error in thread:" + Thread.currentThread().getId() + "...............");
}
}
添加我的控制器就像:
@RestController
public class ExampleController {
@GetMapping("/example")
public String example() {
System.out.println("Example in thread:" + Thread.currentThread().getId());
return "Example";
}
}
我所看到的是,无论我访问/example还是/notexist,过滤器都会被执行
事实上,我希望我的过滤器做后期匹配,只为/example执行。
更具体地说,我希望看到/example的控制台输出:
Start AppFilter1 in thread:....
Example in thread:.....
End AppFilter1 in thread:....
对于像 /notexist这样不匹配的资源,根本没有控制台输出。
谢谢
《这个杀手不太冷》
Spring web flux < code > web filter 类与Jersey中的前置/后置匹配过滤器的运行级别不同。它实际上更接近于Servlet过滤器。
WebFilter
不知道处理请求的内容 - 它可能是控制器,提供静态资源的处理程序或任何其他自定义处理程序。
由于您在这里处于HTTP级别,因此您只需检查请求路径以及响应状态是否不是“404 not Found”。
因为你的问题没有提供你在这里试图实现什么的背景(业务逻辑?身份验证?日志记录?跟踪?任何涉及I/O的操作?),我真的不能说更多关于反应器运算符的选择。
如果您想要一个只在资源上操作的过滤器(如在Jersey Resources中),那么< code>WebFilter不是正确的选择,因为它在较低的级别上操作(所有HTTP交换)。我不认为Spring框架中有这样的基础设施。随意在Spring Framework中打开一个增强请求(这次提供关于您的用例的足够详细的信息)。
我目前的网络环境大致如下图所示,绿色圈里的是我有管理权限的设备 其中: 内网IP/CIDR=10.0.0.0/8,固定内网IP为10.11.12.13 内网路由器WAN IP设置为10.11.12.13且打开了DHCP,也就是说无线网卡获取到的是192.168.1.0/24段的地址,而不是10.0.0.0/8段的地址,如果非必要,需要保持这样不做更改 需求是能在不连接内网路由器的情况下VNC到内网
我通过kong创建了一个新的API配置。。(虚拟API)如下所示。 卷曲-i-X POST\ --网址http://localhost:8001/apis/\--data'name=myRESTapi'\--data'hosts=myRESTapi。com'\--data'上游url=http://demo1592110.mockable.io/hello' HTTP/1.1 201创建日期: F
问题内容: 我的机器在端口8080上运行着jboss,我想在网络上共享jboss服务器,以便我使用jbossws- native-4.0.2运行jboss服务,但是我仍然无法访问网络上的jboss服务器,请帮助。 问题答案: 启动jboss(run.sh或run.bat)时使用选项-b 0.0.0.0,这会将端口绑定到所有网络接口。默认值为localhost,这就是为什么您无法通过网络访问服务器的
我的web.xml档案有问题。错误: 元素类型"web-app"的内容必须匹配"(图标?、显示名称?、描述?、可分发?、上下文-参数*、过滤器*、过滤器-映射*、监听器*、servlet*、servlet-映射*、会话-配置?、mime-映射*、欢迎-文件-列表?、错误-页面*、taglib*、资源-环境-参考*、资源-参考*、安全-约束*,login-config?,安全角色*,env入口*,e
尝试创建一个程序,要求用户输入一个位置,如果用户输入,即南,它可以从csv中的“位置”列中读取,无论哪一行包含“南”(接受大写或小写),都会打印名称列中的名称。因此,如果用户输入南,将返回Holos和Deafer。 我似乎找不到如何实际打印包含匹配输入的特定行,只能打印整个列。 非常感谢您的帮助! csv 只读取特定列的当前代码
null A-ZA-Z0-90,3)(?ltSerialMarket&>A-ZA-Z0,2)(?ltSerialSuffix&>a-zA-Z0-9*)/code> 基本上它说: 这意味着: 匹配1 完全匹配0-8 组 0-3 abc 组 3-5 fo 组 5-8条 上述案例是预期结果。 当regex失败时,因为第4个和第5个字符是数字而不是字母,所以它失败了,这是正确的。问题是应该与第二组匹配的字