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

上面的文章中,已经使用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:

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值