参考连接 https://www.jianshu.com/p/511db36c1b3e
路由转发
EnableZuulProxy 启动类添加
zuul:
routes:
# /myProduct/product/list -> /product/product/list 转发路径
aaaaaa: # 这个可以任意填写
path: /myProduct/**
serviceId: product
sensitiveHeaders: # 这个设置成空,Cookie才能使用
#简洁写法
# product: /myProduct/**
management:
security:
enabled: false # 权限设置 这个不设置,上面不会通过
排除
zuul:
#排除某些路由
ignored-patterns:
- /**/product/listForOrder
management:
security:
enabled: false
Cookie Zuul种默认被限制了
sensitiveHeaders: # 这个设置成空,Cookie才能使用
filter
@Component
public class TokenFilter extends ZuulFilter {
@Override
public String filterType() {
//类型
return PRE_TYPE;
}
@Override
public int filterOrder() {
//越小优先级越高
return PRE_DECORATION_FILTER_ORDER - 1;
}
@Override
public boolean shouldFilter() {
//是否开启状态
return true;
}
@Override
public Object run() {
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest request = requestContext.getRequest();
//这里从url参数里获取, 也可以从cookie, header里获取
String token = request.getParameter("token");
if (StringUtils.isEmpty(token)) {
requestContext.setSendZuulResponse(false);
requestContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
}
return null;
}
}
令牌桶限流
https://www.jianshu.com/p/5d4fe4b2a726 RateLimiter 使用方法
/**
* 限流
* Created by 廖师兄
* 2018-03-11 23:44
*/
@Component
public class RateLimitFilter extends ZuulFilter{
private static final RateLimiter RATE_LIMITER = RateLimiter.create(100);//每秒添加100个令牌
@Override
public String filterType() {
return PRE_TYPE;
}
@Override
public int filterOrder() {
return SERVLET_DETECTION_FILTER_ORDER - 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
if (!RATE_LIMITER.tryAcquire()) {
throw new RateLimitException();
}
return null;
}
}
跨域
项目内单个接口 使用CrossOrigin
在网关设置全局跨越
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
final CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.setAllowedOrigins(Arrays.asList("*")); //http:www.a.com
config.setAllowedHeaders(Arrays.asList("*"));
config.setAllowedMethods(Arrays.asList("*"));
config.setMaxAge(300l);//缓存时间,在单位时间内,同一请求不再验证
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);
}
}