Spring Cloud Zuul(服务网关)
发布日期:2021-05-09 04:58:05 浏览次数:20 分类:博客文章

本文共 4636 字,大约阅读时间需要 15 分钟。

新建应用:api-gateway

pom.xml

4.0.0
com.example
api-gateway
0.0.1-SNAPSHOT
jar
api-gateway
Demo project for Spring Boot
org.springframework.boot
spring-boot-starter-parent
2.0.6.RELEASE
UTF-8
UTF-8
1.8
Finchley.SR2
org.springframework.boot
spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-config
org.springframework.cloud
spring-cloud-starter-netflix-zuul
org.springframework.cloud
spring-cloud-starter-zookeeper-discovery
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

application.yml

server:  port: 9000management:  endpoints:    web:      exposure:        include: '*'  server:    port: 12345zuul:  routes:    configserver:   #自定义的名字      path: /myConfig/**      serviceId: config    user:      path: /myUser/**      serviceId: provider  ignored-patterns:      - /config/**      - /gateway/**  sensitive-headers:  #ignore-local-service: true  忽略默认的路由

bootstrap.yml

spring:  application:    name: gateway  cloud:    zookeeper:      discovery:        register: true      connect-string: 192.168.3.201:2182    config:      discovery:        service-id: config        enabled: true

启用@EnableZuulProxy

package com.example.apigateway;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.zuul.EnableZuulProxy;@SpringBootApplication@EnableZuulProxypublic class ApiGatewayApplication {    public static void main(String[] args) {        SpringApplication.run(ApiGatewayApplication.class, args);    }}

可以使用:ip:端口/actuator/routes 这样的地址看到已经注册的路由

 

自定义过滤器:需要继承ZuulFilter 

package com.example.apigateway.filter;import com.example.apigateway.util.CookUtil;import com.netflix.zuul.ZuulFilter;import com.netflix.zuul.context.RequestContext;import com.netflix.zuul.exception.ZuulException;import org.apache.commons.lang.StringUtils;import org.springframework.http.HttpStatus;import org.springframework.stereotype.Component;import javax.servlet.http.HttpServletRequest;import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_DECORATION_FILTER_ORDER;import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_TYPE;@Componentpublic class TokenFilter extends ZuulFilter {    @Override    /**     * pre     * post     * route     * error     */    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() throws ZuulException {        // 获取请求对象        RequestContext context = RequestContext.getCurrentContext();        HttpServletRequest request = context.getRequest();        // 获取地址栏传入的参数        String token = CookUtil.getCookieValue("token", request).getValue();        if (StringUtils.isEmpty(token)) {            context.setSendZuulResponse(false);            context.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());        }        return null;    }}

 

 

完整代码:

https://gitee.com/lm970585581/cloud-config/tree/master/api-gateway

 

上一篇:redis4.0.10安装与常用命令
下一篇:Spring Cloud Config

发表评论

最新留言

不错!
[***.144.177.141]2025年04月21日 12时55分42秒