Idea下SpringCloud2实验(四、Zuul网关实现路由转发和过滤)
一、创建springBoot项目springcloud-zuul-server项目
专注于为中小企业提供成都网站设计、成都网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业黄石港免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
二、配置文件
1、pom.xml文件
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.4.RELEASE
com.jane
springcloud-zuul-server
0.0.1-SNAPSHOT
springcloud-zuul-server
Demo project for Spring Boot
1.8
Greenwich.SR1
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-netflix-zuul
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.boot
spring-boot-maven-plugin
2、启动文件
package com.jane.springcloudzuulserver;
import com.jane.springcloudzuulserver.filter.TokenFilter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class SpringcloudZuulServerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudZuulServerApplication.class, args);
}
//将过滤器在spring生成
@Bean
public TokenFilter tokenFilter() {
return new TokenFilter();
}
}
3、application.properties
server.port=6030
spring.application.name=zuul-gateway
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:6001/eureka/
zuul.routes.springcloud-eureka-customer.path=/springcloud-eureka-customer/**
4、过滤器TokenFilter
package com.jane.springcloudzuulserver.filter;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import com.netflix.zuul.exception.ZuulException;
import javax.servlet.http.HttpServletRequest;
public class TokenFilter extends ZuulFilter {
//pre:主要用在路由映射的阶段是寻找路由映射表的
//routing:具体的路由转发过滤器是在routing路由器,具体的请求转发的时候会调用
//error:一旦前面的过滤器出错了,会调用error过滤器。
//post:当routing,error运行完后才会调用该过滤器,是在最后阶段的
@Override
public String filterType() {
return "pre";
}
//自定义过滤器执行的顺序,数值越大越靠后执行,越小就越先执行
@Override
public int filterOrder() {
return 0;
}
//控制过滤器生效不生效,可以在里面写一串逻辑来控制,true是生效
@Override
public boolean shouldFilter() {
return true;
}
//执行过滤逻辑
@Override
public Object run() throws ZuulException {
RequestContext context = RequestContext.getCurrentContext();
HttpServletRequest request = context.getRequest();
//如果有授权服务器,这里可以做统一登陆授权校验
String token = request.getParameter("token");
if(token == null) {
context.setSendZuulResponse(false);
context.setResponseStatusCode(401);
context.setResponseBody("no token , Auth deny");
}
return null;
}
}
三、启动文件,结合之前的文章 注册中心 服务提供者 服务消费,全部启动
1、服务如下图:
2、访问结果如下
没有token的请求:
有token的请求:
当前题目:Idea下SpringCloud2实验(四、Zuul网关实现路由转发和过滤)
分享路径:http://scyanting.com/article/jgsccp.html