软件定制开发供应商Spring Cloud GateWay——Filter过滤器

基于SpringCloud GateWay 3.1.2 版本

  • 软件定制开发供应商内置过滤器

    Spring Cloud GateWay 软件定制开发供应商内置了下图中的过滤器,软件定制开发供应商具体的内置过滤器如何使用,可参考,描述都很简单,本文重点在自定义过滤器的使用中

  • 自定义过滤器

        官网文档地址:

创建自定义过滤器类,实现GlobalFilter, Ordered。并实现filter、getOrder两个方法。

getOrder方法返回 【-2147483648~2147483647】范围内的一个整数,数值越小优先级越高,越先执行。

filter方法,则是我们这个过滤器要处理的业务逻辑。该方法有两个参数ServerWebExchange exchange, GatewayFilterChain chain。

ServerWebExchange接口中主要是获取当前请求的request、response、attributes

通过exchange.getRequest()方法,可获取到请求发送的一些参数等信息。

通过exchange.getResponse()方法,可对当前请求进行处理,根据具体的业务逻辑调用是否直接返回某些信息。

通过chain.filter(exchange)方法,对当前请求进行放行。

  1. /**
  2. * @author songzerong
  3. * @desc 自定义GateWay过滤器 DemoFilter
  4. */
  5. @Component
  6. @Slf4j
  7. public class DemoFilter implements GlobalFilter, Ordered {
  8. @SneakyThrows
  9. @Override
  10. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  11. log.info("demo global filter");
  12. String str = exchange.getRequest().getQueryParams().getFirst("str");
  13. if (null == str) {
  14. // 若请求参数为null,则返回一个状态码,前台处理,否则继续执行后续的操作
  15. ServerHttpResponse response = exchange.getResponse();
  16. boolean b = response.setStatusCode(HttpStatus.METHOD_NOT_ALLOWED);
  17. if (b) {
  18. return exchange.getResponse().setComplete();
  19. } else {
  20. throw new Exception("设置状态码出错");
  21. }
  22. }
  23. return chain.filter(exchange);
  24. }
  25. @Override
  26. public int getOrder() {
  27. return -1;
  28. }
  29. }

若请求地址不带请求参数,则进入filter会直接返回405错误码。

若请求地址带请求参数,则进入filter则会放行,并继续执行后续处理逻辑。

 

将自定义过滤器加入Spring容器,有两种方式一种是直接在过滤器类中添加@Component注解,另一种是官方文档中写的,通过添加@Bean注解的形式进行注入使用。

  1. /**
  2. * @author songzerong
  3. * @desc 自定义GateWay过滤器 DemoFilter
  4. */
  5. @Slf4j
  6. public class DemoFilter implements GlobalFilter, Ordered {
  7. @Bean
  8. public GlobalFilter demoFilter(){
  9. return new DemoFilter();
  10. }
  11. @SneakyThrows
  12. @Override
  13. public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  14. log.info("demo global filter");
  15. String str = exchange.getRequest().getQueryParams().getFirst("str");
  16. if (null == str) {
  17. // 若请求参数为null,则返回一个状态码,前台处理,否则继续执行后续的操作
  18. ServerHttpResponse response = exchange.getResponse();
  19. boolean b = response.setStatusCode(HttpStatus.METHOD_NOT_ALLOWED);
  20. if (b) {
  21. return exchange.getResponse().setComplete();
  22. } else {
  23. throw new Exception("设置状态码出错");
  24. }
  25. }
  26. return chain.filter(exchange);
  27. }
  28. @Override
  29. public int getOrder() {
  30. return -1;
  31. }
  32. }

 至此,自定义过滤器添加完成。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发