SpringWebFlux過濾器的使用姿勢

WebFlux中過濾器的使用方法和SpringMVC中相似,都是實(shí)現(xiàn)接口中的filter方法,SpringMVC中使用WebFliter接口,而在WebFlux中使用的是HandlerFilterFunction接口

下面實(shí)現(xiàn)一個簡單的TOKEN驗(yàn)證,驗(yàn)證請求參數(shù)中是否包含TOKEN,當(dāng)然實(shí)際項(xiàng)目中token會存放在header里面
這里使用@Order注解,表示過濾器會按添加的順序進(jìn)行順序調(diào)用

@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函數(shù)中使用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();
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容