<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例子 請自行復制路徑到瀏覽器