Springcloud学习——Zuul服务网关及路由权限控制

1. Github项目地址 https://github.com/zengzhen1994/springboot-learning (选择Springcloud/Springcloud-learning-2)

2. 准备工作

2.1 Eureka服务器用来注册服务,如果还没有搭建,点击这里

2.2 准备两个服务提供者,分别在端口78,79

2.3 开启服务提供者和Eureka服务器,访问 http://localhost:81/ 如图表示服务注册成功


3. Zuul服务网关搭建

在之前的pom.xml中加入zuul所需的jar包,如下

		
			org.springframework.cloud
			spring-cloud-starter-zuul
		
编写一个zuul过滤器,用来控制权限。每次发送请求的时候都需要一个token,如果没有token就没有权限,在被路由之前过滤器就会自动拦截掉返回401错误。
package com.zz.springcloud.zuulfilter;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import javax.servlet.http.HttpServletRequest;

public class Filter extends ZuulFilter  {

	/**
	 * 返回一个字符串代表过滤器的类型
	 * pre表示被路由之前
	 */
    @Override
    public String filterType() {
        return "pre";
    }

	/**
	 * 过滤顺序
	 */

    @Override
    public int filterOrder() {
        return 0;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        String accessToken = String.valueOf(request.getParameter("Token"));
        if(!accessToken.equals("zz")) {
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(401);
            return null;
        }
        return null;
    }

}
写完过滤器之后,以bean的形式导入到主程序,并开启zuul网关服务。

package com.zz.springcloud;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;

import com.zz.springcloud.zuulfilter.Filter;

@EnableZuulProxy
@SpringCloudApplication
public class GateWayApplication {

	public static void main(String[] args) {
		new SpringApplicationBuilder(GateWayApplication.class).web(true).run(args);
	}

	@Bean
	public Filter getFilter() {
		return new Filter();
	}

}
到这里,网关服务和权限过滤就搭建好了。还需要更改配置,让zuul去管理各个服务。

修改application.properties如下

spring.application.name=Service-Gateway
server.port=100

# routes to service1
zuul.routes.service1.path=/service-1/**
zuul.routes.service1.serviceId=eureka-service-1
# routes to service2
zuul.routes.service2.path=/service-2/**
zuul.routes.service2.serviceId=eureka-service-2
eureka.client.serviceUrl.defaultZone=http://localhost:81/eureka/
serviceId指向你之前建立服务的application name,这样就可以通过链接映射到服务上,启动网关

4. 运行演示

4.1 发送请求到service-1(不带token):http://localhost:100/service-1/plus?number=0

由于没有权限,页面跳转401页面。

Springcloud学习——Zuul服务网关及路由权限控制_第1张图片

4.2 发送请求到service-1(带token):http://localhost:100/service-1/plus?number=1&Token=zz

Springcloud学习——Zuul服务网关及路由权限控制_第2张图片

4.3 发送请求给service-2(带token):http://localhost:100/service-2/plus?number=1&Token=zz

效果同上

4.4 plus是我service里定义的rest接口,对应一个+1的方法。如果你自己定义了方法,改成了你的映射就可以了。








你可能感兴趣的:(Springcloud)