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();
}