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