<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
zuul:
prefix: /gateway
ignored-services:
-忽略服务
routes:
item-service: /item/**
#拦截白名单
leyou:
filter:
allowPaths:
- /api/auth
- /api/search
@EnableZuulProxy
//配置跨域对象
@Configuration
public class GlobalCorsConfig {
@Bean
public CorsFilter corsFilter() {
//1.添加CORS配置信息
CorsConfiguration config = new CorsConfiguration();
//1) 允许的域,不要写*,否则cookie就无法使用了
config.addAllowedOrigin("http://manager.leyou.com");
//2) 是否发送Cookie信息
config.setAllowCredentials(true);
//3) 允许的请求方式
config.addAllowedMethod("OPTIONS");
config.addAllowedMethod("HEAD");
config.addAllowedMethod("GET");
config.addAllowedMethod("PUT");
config.addAllowedMethod("POST");
config.addAllowedMethod("DELETE");
config.addAllowedMethod("PATCH");
// 4)允许的头信息
config.addAllowedHeader("*");
// 6) 有效时长
config.setMaxAge(3600L);
//2.添加映射路径,我们拦截一切请求
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", config);
//3.返回新的CorsFilter.
return new CorsFilter(configSource);
}
}
//自定义过滤器
@Component
public class LoginFilter extends ZuulFilter {
public String filterType() {
//过滤器类型,pre,router,post,error
return FilterConstants.PRE_TYPE;
}
public int filterOrder() {
//过滤器位置,由小到大执行
return FilterConstants.PRE_DECORATION_FILTER_ORDER -1;
}
public boolean shouldFilter() {
//是否过滤
return true;
}
public Object run() throws ZuulException {
//request上下文
RequestContext ctx = RequestContext.getCurrentContext();
//获取request对象
HttpServletRequest request = ctx.getRequest();
//获取路径
request.getRequestURI()
//拦截
ctx.setSendZuulResponse(false);
//设置状态码
ctx.setResponseStatusCode(HttpStatus.FORBIDDEN.value());
return null;
}
}