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

  • Post author:
  • Post category:其他


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


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


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

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

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


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

第三步:修改配置文件

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

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

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

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

KUAISHOU-DOWNLOAD

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


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

我们也可以重命名,比如把

kuaishou-download

名字改下,加入如下注解

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


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

这样网关就配置好了,实现一个列子,登录必须要有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;
    }
}

此时不带cookie访问

使用postman加入cookie访问

访问成功。

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

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



版权声明:本文为xcc_2269861428原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。