SpringWebFlux过滤器的使用姿势

作者: 奔跑的Robi | 来源:发表于2019-11-12 14:48 被阅读0次

WebFlux中过滤器的使用方法和SpringMVC中相似,都是实现接口中的filter方法,SpringMVC中使用WebFliter接口,而在WebFlux中使用的是HandlerFilterFunction接口

下面实现一个简单的TOKEN验证,验证请求参数中是否包含TOKEN,当然实际项目中token会存放在header里面
这里使用@Order注解,表示过滤器会按添加的顺序进行顺序调用

@Order
@Component
public class AuthFilter implements HandlerFilterFunction {

    @Override
    public Mono filter(ServerRequest request, HandlerFunction next) {
        if (request.queryParam("token").isPresent()) {
            return next.handle(request);
        } else {
            return ServerResponse.status(HttpStatus.BAD_REQUEST).build());
        }
    }
}

在Route函数中使用filter:

    @Bean
    public RouterFunction<ServerResponse> route(TransferHandler transferHandler) {
        return route()
                .path("/test", builder -> builder
                        .nest(accept(MediaType.APPLICATION_JSON), builder1 -> builder1
                            .POST("/file", transferHandler::save)
                            .GET("/file", transferHandler::get)))
                .filter(authFilter)
                .build();
    }

以上的使用方式是在每一个接口上都使用filter,如果只想在某一个接口上使用,可以像下面这样

    @Bean
    public RouterFunction<ServerResponse> route(TransferHandler transferHandler) {
        return route()
                .path("/test", builder -> builder
                        .nest(accept(MediaType.APPLICATION_JSON), builder1 -> builder1
                            .POST("/file", transferHandler::save).filter(authFilter)
                            .GET("/file", transferHandler::get)))
                .build();
    }

相关文章

网友评论

    本文标题:SpringWebFlux过滤器的使用姿势

    本文链接:https://www.haomeiwen.com/subject/gbfqictx.html