Zuul是SpringCloud全家桶的微服务网关。所有从app或者网站(第三方)来的请求都会经过Zuul到达后端的Netflix应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。
创新互联公司拥有一支富有激情的企业网站制作团队,在互联网网站建设行业深耕10年,专业且经验丰富。10年网站优化营销经验,我们已为超过千家中小企业提供了网站建设、成都做网站解决方案,按需开发,设计满意,售后服务无忧。所有客户皆提供一年免费网站维护!
引入jar包:
org.springframework.cloud
spring-cloud-starter-eureka
1.3.5.RELEASE
org.springframework.cloud
spring-cloud-starter-zuul
1.3.5.RELEASE
配置文件:application.yml。
server:
port: 7004 # 端口
spring:
application:
name: zuul-getway # 服务名
eureka:
client:
service-url:
defaultZone: http://jack:666@localhost:8764/eureka/ # 需要注册到eureka
instance:
instance-id: ${spring.application.name}:${server.port}
zuul:
routes:
order-service: /od/** # 对某个服务自定义路由规则
serviceId: order-service # 这个配置可以实现负载均衡,默认是轮询
# 设置某些服务不要进行反向代理 进行路由,多个服务用逗号隔开
ignored-services: order-service, user-service
prefix: /api # 请求路径的前缀
查看是否注册到eureka。
Eureka注册中心
访问路径:
localhost:7004/api/od/getOrder?token=1235。
(后面带token是因为我配置了pre过滤器,下面会介绍)。
注:除了默认的过滤器类型以外Zuul还允许创建自定义的过滤器类型。
很简单,只需设置zuul.ClassName.filterType.disable=true ,即可禁用SimpleClassName所对应的过滤器。例如:zuul.TokenFilter.pre.disable=true; 即可禁用TokenFilter过滤器。
例子: 鉴权认证。如果参数带了token就允许访问。
/**
* pre过滤器
* @Author Big.Hu
*/
@Component
public class TokenFilter extends ZuulFilter {
@Override
public Object run() {
System.err.println("执行pre前置过滤器。。。。。。。。。");
RequestContext currentContext = RequestContext.getCurrentContext();
HttpServletRequest request = currentContext.getRequest();
StringBuffer requestURL = request.getRequestURL();
System.out.println("requestURL:" + requestURL);
// 获取请求的参数
String token = request.getParameter("token");
if (StringUtils.isEmpty(token)) {
// 如果参数为空则过滤该请求,不对其进行路由
currentContext.setSendZuulResponse(false);
// 设置错误码:401
currentContext.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
currentContext.set("SUCCESS", false);
} else {
// 不过滤该请求,对其进行路由
currentContext.setSendZuulResponse(true);
// 设置成功码:200
currentContext.setResponseStatusCode(HttpStatus.SC_OK);
currentContext.set("SUCCESS", true);
}
System.out.println("token:" + token);
return null;
}
/**
* 当前filter类型:pre、post、route、error
*/
@Override
public String filterType() {
return FilterConstants.PRE_TYPE;
}
/**
* 表示当前filter优先级
*/
@Override
public int filterOrder() {
return FilterConstants.PRE_DECORATION_FILTER_ORDER - 1;
}
/**
* 是否执行该过滤器?
**/
@Override
public boolean shouldFilter() {
return true;
}
}
例: 在返回的时候设置一个cookie。
/**
* Post过滤器
* @Author Big.Hu
*/
@Component
public class PostFilter extends ZuulFilter {
/**
* POST过滤器:在route和error过滤器之后执行
*/
@Override
public String filterType() {
return FilterConstants.POST_TYPE;
}
@Override
public int filterOrder() {
return FilterConstants.SEND_RESPONSE_FILTER_ORDER - 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
System.err.println("执行Post过滤器。。。。。。。。。");
RequestContext currentContext = RequestContext.getCurrentContext();
HttpServletResponse response = currentContext.getResponse();
Cookie cookie = new Cookie("name", "Jack.Hu");
cookie.setMaxAge(60 * 60 * 24);
response.addCookie(cookie);
return null;
}
}
访问路径:
localhost:7004/api/od/getOrder。
(没带token参数)请求被pre过滤器过滤掉了。
不带token请求
带上token参数请求成功!
带token请求
再按f12看post过滤器设置的cookie。
查看cookie
控制台:
控制台
当前名称:SpringCloud系列之Zuul网关和Zuul过滤器
新闻来源:http://www.csdahua.cn/qtweb/news49/152399.html
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网