springCloud 学习笔记—服务网关-Zuul

 

参考连接 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);
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值