配置
zuul:
routes:
client-a:
path: /client/**
serviceId: client-a
filter
public class AccessUserNameFilter extends ZuulFilter {
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
System.out.println(String.format("%s AccessUserNameFilter request to %s", request.getMethod(), request.getRequestURL().toString()));
String username = request.getParameter("username");// 获取请求的参数
if(null != username && username.equals("chhliu")) {// 如果请求的参数不为空,且值为chhliu时,则通过
ctx.setSendZuulResponse(true);// 对该请求进行路由
ctx.setResponseStatusCode(200);
ctx.set("isSuccess", true);// 设值,让下一个Filter看到上一个Filter的状态
return null;
}else{
ctx.setSendZuulResponse(false);// 过滤该请求,不对其进行路由
ctx.setResponseStatusCode(401);// 返回错误码
ctx.setResponseBody("{\"result\":\"username is not correct!\"}");// 返回错误内容
ctx.set("isSuccess", false);
return null;
}
}
@Override
public boolean shouldFilter() {
return true;// 是否执行该过滤器,此处为true,说明需要过滤
}
@Override
public int filterOrder() {
return 0;// 优先级为0,数字越大,优先级越低
}
@Override
public String filterType() {
return "pre";// 前置过滤器
}
}
ctx.setSendZuulResponse(true);// 对该请求进行路由
zuul整合Hystrix
@Component
public class ProductFallback implements ZuulFallbackProvider {
/**
* 指定需要托底处理的服务名
*/
@Override
public String getRoute() {
return "e-book-product-provider";
}
/**
* 服务无法使用时,返回的托底信息
*/
@Override
public ClientHttpResponse fallbackResponse() {
return new ClientHttpResponse() {
/**
* ClientHttpResponse 的 fallback 的状态码 返回HttpStatus
*/
@Override
public HttpStatus getStatusCode() throws IOException {
return HttpStatus.OK;
}
/**
* ClientHttpResponse 的 fallback 的状态码 返回 int
*/
@Override
public int getRawStatusCode() throws IOException {
return getStatusCode().value();
}
/**
* ClientHttpResponse 的 fallback 的状态码 返回 String
*/
@Override
public String getStatusText() throws IOException {
return getStatusCode().getReasonPhrase();
}
/**
* 设置响应体
*/
@Override
public InputStream getBody() throws IOException {
String msg = "当前服务不可用,请稍后再试";
return new ByteArrayInputStream(msg.getBytes());
}
/**
* 设置响应的头信息
*/
@Override
public HttpHeaders getHeaders() {
HttpHeaders httpHeaders= new HttpHeaders();
MediaType mediaType = new MediaType("application","json", Charset.forName("utf-8"));
httpHeaders.setContentType(mediaType);
return httpHeaders;
}
@Override
public void close() {
}
};
}
}
sensitiveHeaders和ignoredHeaders区别
By default, Zuul considers Cookie,Set-Cookie,Authorization to be sensitive?
spring boot - What’s the difference between zuul.ignoredHeaders and zuul.sensitiveHeaders - Stack OverflowsensitiveHeaders会过滤客户端附带的headers
- zuul.ignoredHeaders会过滤服务之间通信附带的headers
- sensitiveHeaders的内容会最终合并到ignored-headers内。
Zuul 配置项中 sensitiveHeaders 和 ignoredHeaders 的不同_ahutdbx的博客-CSDN博客
怎么区分客户端的?