1、zuul快速入门
pom文件导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
yml文件
server:
port: 8083
spring:
application:
name: zuul
zuul:
routes:
teacherZuul: #这个是随意起的,表示路由名称
path: /** #配置请求url的请求规则
url: http://127.0.0.1:8081 #真正的微服务地址
启动类
@EnableZuulProxy
@SpringBootApplication
public class SpringCloudZuulApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudZuulApplication.class, args);
}
}
在启动类上加@EnableZuulProxy开启服务网关
2、面向服务路由
将上面的代码url改成serviceId
yml文件
server:
port: 8083
spring:
application:
name: zuul
zuul:
routes:
teacherZuul: #这个是随意起的,表示路由名称
path: /** #配置请求url的请求规则
#url: http://127.0.0.1:8081 #真正的微服务地址
service-id: teacher
eureka:
client:
register-with-eureka: true #是否将自己注册到eureka,默认为true
fetch-registry: true #是否从eureka中获得注册信息,默认为true
service-url:
defaultZone: http://root:123@127.0.0.1:1234/eureka/
instance:
prefer-ip-address: true #将自己的ip注册到eureka服务中
ip-address: 127.0.0.1
http://127.0.0.1:8083/queryTeacherId?id=1](http://127.0.0.1:8083/queryTeacherId?id=1
请求上面地址,先经过8083在到达teacher服务
使用zuul写一个进入方法前判断是否登录的demo
filter类
package com.ganlong.filter;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Component;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
@Component
public class MyFilter extends ZuulFilter{
/**
* 返回一个布尔值,表示过滤器是否执行,true执行,false不执行
*/
@Override
public boolean shouldFilter() {
// TODO Auto-generated method stub
return true;
}
/**
* 过滤器的业务逻辑
*/
@Override
public Object run() throws ZuulException {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
Object accessToken = request.getParameter("token");
if(accessToken == null) {
ctx.setSendZuulResponse(false);//过滤该请求,不进行路由
ctx.setResponseStatusCode(401);//设置响应状态码
try {
ctx.getResponse().getWriter().write("token is empty");
}catch (Exception e){}
return null;
}
return null;
}
/**
* 通过返回的int来定义过滤器的执行顺序,数字越小优先级越高
*/
@Override
public int filterOrder() {
// TODO Auto-generated method stub
return 0;
}
/**
* 过滤器类型
* pre:请求被路由之前执行
* routing:在路由时调用
* post:在routing和error之后调用
* error:处理请求发生错误时调用
*/
@Override
public String filterType() {
// TODO Auto-generated method stub
return "pre";
}
}
网友评论