我们可以通过网关过滤器,实现一些逻辑的处理,比如ip黑白名单拦截、特定地址的拦截等。下面的代码中做了两个过滤器,并且设定的先后顺序,只演示过滤器与运行效果。
在这里插入代码片 /** * ip拦截 */ @Component public class IpFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 获取客户端的访问ip InetSocketAddress remoteAddress = exchange.getRequest().getRemoteAddress(); String hostName = remoteAddress.getHostName(); System.out.println("IP:" + hostName); // 放行 return chain.filter(exchange); } /** * 过滤器的执行优先级,数值越小执行优先级越高 * @return */ @Override public int getOrder() { return 1; } }特定地址的拦截
在这里插入代码片 @Component public class UrlFilter implements GlobalFilter, Ordered { @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { // 获取请求uri路径 String path = exchange.getRequest().getURI().getPath(); // 请求路径为 /search 则拦截,其他的放行 if ("/search".equals(path)){ ServerHttpResponse response = exchange.getResponse(); response.setStatusCode(HttpStatus.UNAUTHORIZED);//返回给客户端错误信息 return response.setComplete(); } return chain.filter(exchange); } @Override public int getOrder() { return 2; } }