Bootstrap

Spring Cloud Gateway整合JWT现统一认证和鉴权

当下比较主流的微服务权限解决方案,在网关进行校验认证和鉴权,而系统其他的业务api服务只需要单纯的提供服务。从而实现业务逻辑代码和认证鉴权的解耦。

系统架构

架构方面可以抽象成三种类型的服务,分别是网关服务、认证服务、API服务

  • 主要maven依赖
<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

<dependency>
      <groupId>io.jsonwebtoken</groupId>
      <artifactId>jjwt</artifactId>
      <version>0.9.1</version>
</dependency>

网关服务

使用gateway全局过滤器获取token后进行用户认证及鉴权(根据自己业务需求)重点是将token中解析的数据放到Request Header上,然后再由网关路由到目的API服务。

package cn.raenlyn.config;

import cn.raenlyn.util.JWTUtil;
import com.alibaba.fastjson.JSONObject;
import io.jsonwebtoken.Claims;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.io.buffer.DataBuffer;
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.util.StringUtils;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

import java.nio.charset.StandardCharsets;

/**
 * 将登录用户的JWT转化成用户信息的全局过滤器
 */
@Component
public class AuthGlobalFilter implements GlobalFilter {

    private static Logger LOGGER = LoggerFactory.getLogger(AuthGlobalFilter.class);

    @Override
    public Mono<Void> filter(ServerWebE
;