- 下面是简单处理token的例子
@Component
@Order(value = 2)
public class AuthFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
ServerHttpRequest request = exchange.getRequest();
//ServerHttpResponse response = exchange.getResponse();
String token = request.getHeaders().getFirst("token");
if(null == token){
/*http头中没有appKey,修改请求的目标url为/auth/error
request.mutate返回一个请求构建器(builder design pattern),path方法修改请求的url,build方法返回新的request
*/
ServerHttpRequest authErrorReq = request.mutate().path("/auth/error").build();
//erverWebExchange.mutate类似,构建一个新的ServerWebExchange
ServerWebExchange authErrorExchange = exchange.mutate().request(authErrorReq).build();
return chain.filter(authErrorExchange);
} else{
return chain.filter(exchange);
}
}
}
- webFlux将指定的错误信息通过json格式返回给前端
exchange.getResponse().writeWith(Flux.just(exchange.getResponse().bufferFactory().wrap(JsonUtil.toJson(new BaseErrorVO().fail(e.getMessageCode(),e.getSystemMessage())).getBytes())));