上面的文章中,已经使用Feign实现多服务的调用、hystrix实现预警提醒
使用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: