Spring Cloud Gateway使用Token验证详解

 更新时间:2019年02月27日 10:22:49   作者:乡间一壶凉白开  
这篇文章主要介绍了Spring Cloud Gateway使用Token验证详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

引入依赖

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring-cloud.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
  </dependency>
</dependencies>

自定义过滤器

可以继承 AbstractGatewayFilterFactory 或实现 GlobalFilter 实现过滤请求功能

GatewayFilter

GatewayFilter 只能指定路径上应用

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;

@Component
public class AuthGatewayFilterFactory extends AbstractGatewayFilterFactory<AuthGatewayFilterFactory.Config> {

  public AuthGatewayFilterFactory() {
    super(Config.class);
  }

  @Override
  public GatewayFilter apply(Config config) {
    return (exchange, chain) -> {
      System.out.println("Welcome to AuthFilter.");
      String token = exchange.getRequest().getHeaders().getFirst("sign");
      if (Config.secret.equals(token)) {
        return chain.filter(exchange);
      }
      ServerHttpResponse response = exchange.getResponse();
      response.setStatusCode(HttpStatus.UNAUTHORIZED);
      return response.setComplete();
    };
  }

  static class Config {
    static String secret = "1234";
  }
}
spring:
 cloud:
  gateway:
   routes:
   - id: service2_route
    uri: http://127.0.0.1:8082
    predicates:
    - Path=/s2/**
    filters:
    - StripPrefix=1 # 去掉路径的 n 个前缀
    - Auth=true # 输入过滤器类的名称前缀

GlobalFilter

GlobalFilter 可以在全局应用

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Component
public class AuthGlobalFilter implements GlobalFilter, Ordered {
  @Override
  public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
    System.out.println("Welcome to AuthGlobalFilter.");
    ServerHttpRequest request = exchange.getRequest();
    String sign = request.getHeaders().get("sign").get(0);
    String token = "1234";
    if(token.equals(sign)) {
      return chain.filter(exchange);
    }
    ServerHttpResponse response = exchange.getResponse();
    response.setStatusCode(HttpStatus.UNAUTHORIZED);
    return response.setComplete();
  }

  @Override
  public int getOrder() {
    return 0;
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 使用spring框架ResponseEntity实现文件下载

    使用spring框架ResponseEntity实现文件下载

    这篇文章主要介绍了使用spring框架ResponseEntity实现文件下载,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • SpringBoot中的事务配置管理详解

    SpringBoot中的事务配置管理详解

    这篇文章主要介绍了SpringBoot中的事务配置管理详解,Spring Boot 默认的事务规则是遇到运行异常(RuntimeException)和程序错误(Error)才会回滚,但是抛出SQLException就无法回滚了,需要的朋友可以参考下
    2024-01-01
  • 图解Java经典算法归并排序的原理与实现

    图解Java经典算法归并排序的原理与实现

    归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。本文将通过动图详解归并排序的原理及实现,需要的可以参考一下
    2022-09-09
  • SpringBoot项目接入Nacos的实现步骤

    SpringBoot项目接入Nacos的实现步骤

    SpringBoot项目使用nacos作为配置中心和服务注册中心,同时兼容dubbo的注册中心。 本Demo项目使用的SpringBoot版本是2.3.9.RELEASE
    2021-05-05
  • java组件commons-fileupload文件上传示例

    java组件commons-fileupload文件上传示例

    这篇文章主要为大家详细介绍了java组件commons-fileupload实现文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • 从Android源码剖析Intent查询匹配的实现

    从Android源码剖析Intent查询匹配的实现

    这篇文章主要介绍了从Android源码剖析Intent查询匹配的实现,Intent部分的源码为Java代码,需要的朋友可以参考下
    2015-07-07
  • 详解使用Maven开发Web应用详细步骤

    详解使用Maven开发Web应用详细步骤

    这篇文章主要介绍了详解使用Maven开发Web应用详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Java中统计字符个数以及反序非相同字符的方法详解

    Java中统计字符个数以及反序非相同字符的方法详解

    本篇文章是对Java中统计字符个数以及反序非相同字符的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Mybatis中连接查询和嵌套查询实例代码

    Mybatis中连接查询和嵌套查询实例代码

    这篇文章主要给大家介绍了关于Mybatis中连接查询和嵌套查询的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • java中读写Properties属性文件公用方法详解

    java中读写Properties属性文件公用方法详解

    在项目开发中我们会将很多环境特定的变量定义到一个配置文件中,比如properties文件,把数据库的用户名和密码存放到此属性文件中。下面这篇文章就主要介绍了java中读写Properties属性文件公用方法,需要的朋友可以参考借鉴。
    2017-01-01

最新评论