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

spring webflux中有没有为特定URL执行WebFilter的方法

程鸿畅
2023-03-14
public MyFilter() {
    pathPattern = new PathPatternParser().parse("/url");
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {

    if (pathPattern.matches(exchange.getRequest().getPath().pathWithinApplication())) {
        return chain.filter(exchange);
    }

共有1个答案

丁振海
2023-03-14

有多种方法可以做到这一点,下面是其中一种方法

@Slf4j
@Component
public class LogFilter implements WebFilter {

    List<PathPattern> pathPatternList;

    public LogFilter() {
        PathPattern pathPattern1 = new PathPatternParser()
                .parse("/admin");
        PathPattern pathPattern2 = new PathPatternParser().parse("/emp");
        pathPatternList = new ArrayList<>();
        pathPatternList.add(pathPattern1);
        pathPatternList.add(pathPattern2);

    }

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {

        RequestPath path = exchange.getRequest().getPath();
        if (pathPatternList.stream().anyMatch(pathPattern -> pathPattern.matches(path.pathWithinApplication()))) {
            log.info(path.toString() + " path excluded");
            return chain.filter(exchange);
        }
        log.info("executing logic for " + path.toString() + " path");
        return chain.filter(exchange);

    }
}

对于Url/admin/emp,它将排除其他Url的逻辑,它将在日志下面执行逻辑检查

2019-05-10 00:20:55.660  INFO 15837 --- [ctor-http-nio-3] o.l.reactiveapp.filter.LogFilter         : /admin path excluded
2019-05-10 00:20:55.661  INFO 15837 --- [ctor-http-nio-3] o.l.r.controller.AdminController         : get admin
2019-05-10 00:20:58.361  INFO 15837 --- [ctor-http-nio-3] o.l.reactiveapp.filter.LogFilter         : /emp path excluded
2019-05-10 00:20:58.362  INFO 15837 --- [ctor-http-nio-3] o.l.r.controller.EmployeeController      : get employee
2019-05-10 00:21:03.649  INFO 15837 --- [ctor-http-nio-3] o.l.reactiveapp.filter.LogFilter         : executing logic for /messages/10 path
2019-05-10 00:21:03.651  INFO 15837 --- [ctor-http-nio-3] o.l.r.controller.StoresController        : getting message details for id 10 enter code here
 类似资料:
  • 目前在我们的自动化框架中,我们需要有一种能力来控制cucumber中场景步骤的执行。 问题详情: 假设我们有以下步骤作为场景的一部分: 检查订单是否存在 创建订单 我想实现的是在步骤1中进行检查,如果系统中存在订单(通过DB Call),只需跳过整个场景并将其标记为通过/跳过。如果已经有一些符合标准,我们不想下订单。 目前我通过放置一个来处理它,如果我从DB获取Id,它会失败断言说ID已经存在。

  • 试着用TestNG运行我所有的cucumber测试。然而,我的套房没有找到。 当我将TestNG.xml文件作为TestNG运行时,未找到如下所示的测试

  • 问题内容: 我有一个多模块Maven项目,其中一个模块用于分发。 该发行版包含一个我想轻松执行的可执行jar。但是,要执行它,我必须键入类似以下内容: 简单键入以下内容将是更好的选择: 不幸的是,我找不到找到执行.jar的java目标的方法。exec目标实际上可以做到,但是有一个陷阱:jar包含一个嵌入式码头服务器,并且由于exec的工作方式(不使用与maven相同的JVM),除非我杀死进程,否则

  • 我需要向用户显示以下座位并能够预订和取消预订。 我也尝试了unordered_map,但无论我做什么,我都无法使map以我想要的方式显示座位(1A,1B,1C,1D,1E)。 1A 1B 1C 1D 1E 2A 2B 2C 2D 2E... 尝试将座位名称更改为A1 B1 C1 D1...显然,我是C++新手。我知道地图是有序的,并且我知道使用unordered_map无法保证地图的显示方式。 我

  • 我正在开发一个java程序,它接受输入的分数,给出输入的总数和平均值,但是我很难计算出如何获得当前输入的最高分数“我使用了大量嵌套的else-if语句,但必须有一种简单的方法来实现这一点,而不是键入100个else-if语句这是我的代码。我在else-if语句开始的地方添加了一条注释,以确定最高级别

  • 目前我正在为学校做一个项目,下面是要求: 编写一个Temperature类,它将保持以华氏为单位的温度,并提供获取以华氏、摄氏度和开尔文为单位的温度的方法。该类应具有以下字段: :保持华氏温度的倍增器。 该类应具有以下方法: :构造函数接受华氏温度(双倍)并将其存储在ftemp字段中。 :set Fahrenheit方法接受一个华氏温度(作为双值),并将其存储在ftemp字段中。 :返回ftemp