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