php 网关转发,Idea下SpringCloud2实验(四、Zuul网关实现路由转发和过滤)

一、创建springBoot项目springcloud-zuul-server项目

91723bbe533ce9afeda111d24011606a.png

二、配置文件

1、pom.xml文件

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

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、服务如下图:

a013de55efbe64adaded787d1c6f7c62.png

2、访问结果如下

没有token的请求:

4de7a934fb927eed5e93489533cd1cd5.png

有token的请求:

5dd66fc3743291f4cd5a6b4e1cdac4ab.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值