Open hugeterry opened 6 years ago
新建工程eurekazuul,在pom中增加zuul的起步依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency>
在application启动类中添加注解@ EnableZuulProxy,开启zuul
@SpringBootApplication @EnableZuulProxy @EnableEurekaClient @EnableDiscoveryClient public class EurekazuulApplication { public static void main(String[] args) { SpringApplication.run(EurekazuulApplication.class, args); } }
配置文件
server.port=8666 spring.application.name=eurekazuul eureka.client.serviceUrl.defaultZone=http://localhost:8767/eureka/ zuul.routes.api-a.path=/api-a/** zuul.routes.api-a.service-id=eurekaribbon zuul.routes.api-b.path=/api-b/** zuul.routes.api-b.service-id=eurekafeign
服务端口为8666,注册中心端口仍为8767 以/api-a/ 开头的请求都转发给eurekaribbon服务;以/api-b/开头的请求都转发给eurekafeign服务
分别启动以下服务:
不断请求http://localhost:8666/api-a/b?name=huge ,zuul路由触发,返回如下结果: hello huge ,port:8662 hello huge ,port:8664
不断请求http://localhost:8666/api-b/feign?name=huget ,zuul路由触发,返回如下结果: hello huget ,port:8664 hello huget ,port:8662
zuul有过滤功能,可以做一些安全验证
在以上工程继续改造使用
new一个类,继承ZuulFilter
ZuulFilter
@Component public class ServiceFilter extends ZuulFilter { @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 0; } @Override public boolean shouldFilter() { return true; } @Override public Object run() { RequestContext context = RequestContext.getCurrentContext(); HttpServletRequest request = context.getRequest(); Object accessToken = request.getParameter("token"); if (accessToken == null) { context.setSendZuulResponse(false); context.setResponseStatusCode(401); try { context.getResponse().getWriter().write("error:token is empty"); } catch (IOException e) { e.printStackTrace(); } return null; } return null; } }
继承需实现以下方法
filterType
filterOrder
shouldFilter
run
访问http://localhost:8666/api-b/feign?name=huget ,返回结果
error:token is empty
访问http://localhost:8666/api-b/feign?name=huget&token=lala ,返回结果:
hello huget ,port:8662
写的太好了
路由网关zuul
zuul
服务路由
新建工程eurekazuul,在pom中增加zuul的起步依赖
在application启动类中添加注解@ EnableZuulProxy,开启zuul
配置文件
服务端口为8666,注册中心端口仍为8767 以/api-a/ 开头的请求都转发给eurekaribbon服务;以/api-b/开头的请求都转发给eurekafeign服务
分别启动以下服务:
不断请求http://localhost:8666/api-a/b?name=huge ,zuul路由触发,返回如下结果: hello huge ,port:8662 hello huge ,port:8664
不断请求http://localhost:8666/api-b/feign?name=huget ,zuul路由触发,返回如下结果: hello huget ,port:8664 hello huget ,port:8662
服务过滤
在以上工程继续改造使用
new一个类,继承
ZuulFilter
继承需实现以下方法
filterType
过滤器类型,在zuul中定义了四种不同生命周期的过滤器类型:filterOrder
过滤器优先级,定义过滤器执行的顺序,数字越大,优先级越低shouldFilter
过滤器开关,判断该过滤器是否要执行run
过滤器具体逻辑访问http://localhost:8666/api-b/feign?name=huget ,返回结果
访问http://localhost:8666/api-b/feign?name=huget&token=lala ,返回结果: