SpringCloud zuul网关以及实现登录验证

上面的文章中,已经使用Feign实现多服务的调用、hystrix实现预警提醒

使用Feign来实现SpringCloud多模块之间的调用

使用hystrix实现多服务之间的调用出现异常的情况,及时预警

这里实现如何通过网关进行进入url拦截

第一步:创建一个网关项目

 SpringCloud zuul网关以及实现登录验证_第1张图片

SpringCloud zuul网关以及实现登录验证_第2张图片

 SpringCloud zuul网关以及实现登录验证_第3张图片

SpringCloud zuul网关以及实现登录验证_第4张图片

第二步:启动类增加@EnableZuulProxy注解

SpringCloud zuul网关以及实现登录验证_第5张图片

第三步:修改配置文件

server:
  port: 8089
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8671/eureka/
spring:
  application:
    name: api-gateway

SpringCloud zuul网关以及实现登录验证_第6张图片

开始分别启动项目,启动好后,查看下

SpringCloud zuul网关以及实现登录验证_第7张图片

那么如何通过网关访问呢?

第一要看下我们给spring: application: name中命名的名字,比如KUAISHOU-DOWNLOAD

访问的形式为网关端口加上服务名

http://127.0.0.1:8089/kuaishou-download/kuaishou/getDataById/1

SpringCloud zuul网关以及实现登录验证_第8张图片

我们也可以重命名,比如把kuaishou-download名字改下,加入如下注解

zuul:
  routes:
    kuaishou-download: /apigateway/**
  ignored-patterns: /*-service/**

SpringCloud zuul网关以及实现登录验证_第9张图片

http://127.0.0.1:8089/apigateway/kuaishou/getDataById/1

SpringCloud zuul网关以及实现登录验证_第10张图片

 这样网关就配置好了,实现一个列子,登录必须要有token,没有token就打回

首先继承ZuulFilter

package api.gateway.apigateway.filter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import org.apache.commons.lang.StringUtils;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;

/**
 * @author xuchangcheng
 * @Date 2020/10/14 15:45
 * @Description :
 */
@Component
public class LoginFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return PRE_TYPE;
    }

    @Override
    public int filterOrder() {
        return 6;
    }

    @Override
    public boolean shouldFilter() {
        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();
        String requestURI = request.getRequestURI();
        if(requestURI.contains("kuaishou")){
            return true;
        }else{
            return false;
        }
    }

    @Override
    public Object run() throws ZuulException {
        RequestContext currentContext = RequestContext.getCurrentContext();
        HttpServletRequest request = currentContext.getRequest();
        String cookie = request.getHeader("cookie");
        if(StringUtils.isBlank(cookie)){
            currentContext.setSendZuulResponse(false);
            currentContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
        }
        return null;
    }
}

SpringCloud zuul网关以及实现登录验证_第11张图片

此时不带cookie访问

SpringCloud zuul网关以及实现登录验证_第12张图片

使用postman加入cookie访问

SpringCloud zuul网关以及实现登录验证_第13张图片

访问成功。

这里为什么要使用cookie来说呢,是因为网关这里默认不传递cookie信息,也就是我们在快手系统里面是拿不到cookie这个值的,我们需要改下配置文件,让他支持,让sensitive-headers 值为空即可。

SpringCloud zuul网关以及实现登录验证_第14张图片

zuul:
  routes:
    kuaishou-download: /apigateway/**
  ignored-patterns: /*-service/**
  sensitive-headers:

 

你可能感兴趣的:(springcloud,SpringCloud网关,zuul实现登录拦截,zuulcookie失效)