参考文章:
1.spring cloud gateway之filter篇 (这篇文章讲了很多过滤器及实现自己的过滤器方法)
2.SpringCloud Gateway 全局过滤器
提前结束
如果在某一个过滤器链中,用户身份认证不通过,如何提前结束请求呢,也就是不再往下转发了。可以使用exchange.getResponse().setComplete()
1 2 3 4 5 6 7 8 9 10
| @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { String token = exchange.getRequest().getHeaders().getFirst("token"); if (token == null || token.isEmpty()) { logger.info( "token is empty..." ); exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); return exchange.getResponse().setComplete(); } return chain.filter(exchange); }
|
参考文章:
1.Spring Cloud Gateway 自定义Filter (这里有如何提前结束)
2.spring cloud gateway GlobalFilter设置返回HTTPcode和response (这里有如何返回json字符串)
3.获取SpringCloud gateway响应的response的值,记录踩坑
中文乱码问题
关于中文乱码的问题,我添加了response.getHeaders().setContentType(MediaType.APPLICATION_JSON);这个Content-Type就好了。
1 2 3 4 5 6 7 8 9
| @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpResponse response=exchange.getResponse(); response.setStatusCode(HttpStatus.OK); response.getHeaders().setContentType(MediaType.APPLICATION_JSON); byte[] bytes = "{\"status\":401,\"messageg\":\"您无权访问该数据库\"}".getBytes(StandardCharsets.UTF_8); DataBuffer buffer = response.bufferFactory().wrap(bytes); return response.writeWith(Flux.just(buffer)); }
|
参考文章:
1.spring cloud gateway 获取返回值,中文乱码 (这个好像也没有多大的用处)