<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <!--因为zuul 也是微服务因此应该属于euaeka的客户端,因此须要引入这个--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
/* * zuul 的第一个功能就是路由转发功能,全部的请求访问第一个访问是经过zuul * */ @EnableZuulProxy //用这个会提供不少过滤器,@EnableZuulServer 会减小不少功能 @SpringCloudApplication public class GetWayApplication { public static void main(String[] args) { SpringApplication.run(GetWayApplication.class); } }
server: port: 10010 eureka: client: service-url: defaultZone: http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka registry-fetch-interval-seconds: 50 #客户端拉取注册中心的服务列表 spring: application: name: getway zuul: routes: USER-SERVICE: /user-service/** #haha: #path: /user/** # 第一步简化:这里是写死的地址,因此应该经过Eureka 来获取对应的服务器 因此应该配置serviceId #url: 127.0.0.1:8982 #serviceId: USER-SERVICE
#第二步简化:因为haha 这个名字随便起 而重要的只有path 和serviceId 因此简化配置 serviceId: path配置便可
#第三部简化: zuul 其实默认配置了serviceId: path 这种配置因此你能够什么都不配置 但若是你想忽略一些微服务不暴露出来须要配值ignor-xxx请百度
场景很是多:spring
@Component public class LoginFiter extends ZuulFilter { /* - pre:请求在被路由以前执行 - routing:在路由请求时调用 - post:在routing和errror过滤器以后调用 - error:处理请求时发生错误调用 */ @Override public String filterType() { return FilterConstants.PRE_TYPE; } /*经过返回的int值来定义过滤器的执行顺序,数字越小优先级越高。*/ @Override public int filterOrder() { return FilterConstants.PRE_DECORATION_FILTER_ORDER-1; } @Override //是否开启此过滤器 public boolean shouldFilter() { return true; } @Override //执行逻辑 public Object run() throws ZuulException { //获取request RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); //判断是否带有access-token 参数 String token = request.getParameter("access-token"); if(StringUtils.isEmpty(token)){ //没有就返回无权限403 ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(HttpStatus.SC_FORBIDDEN); } //若是有就默认返回true 因为默认就不须要处理了返回null便可 return null; } }
https://files.cnblogs.com/files/lanSeGeDiao/springCloud-demo.zip以上是springCloud的DEMO例子 请自行复制路径到浏览器