专栏首页架构探险之道单点登录设计 之Spring Cloud GateWay

单点登录设计 之Spring Cloud GateWay

单点登录设计 之Spring Cloud GateWay

@TOC

手机用户请横屏获取最佳阅读体验,REFERENCES中是本文参考的链接,如需要链接和更多资源,可以关注其他博客发布地址。

平台

地址

CSDN

https://blog.csdn.net/sinat_28690417

简书

https://www.jianshu.com/u/3032cc862300

个人博客

https://yiyuery.github.io/NoteBooks/

官网简介

Spring Cloud Gateway该项目提供了一个用于在Spring MVC之上构建API网关的库。 Spring Cloud Gateway旨在提供一种简单而有效的方式来路由API并为他们提供横切关注点,例如:安全性,监控/指标和弹性。

Spring Cloud Gateway 官网特性

  • 基于Spring Framework 5,Project Reactor和Spring Boot 2.0构建
  • 能够匹配任何请求属性上的路由。
  • 指定路由配置属性和过滤器。
  • Hystrix Circuit Breaker集成。
  • Spring Cloud DiscoveryClient集成
  • 易于编写属性和过滤器
  • 限流
  • 路径重写

依赖

buildscript {
    repositories {
        maven { url = "https://plugins.gradle.org/m2/" }
        maven { url = "http://maven.aliyun.com/nexus/content/groups/public/" }
        jcenter()
    }
    dependencies {
        classpath libs["spring-boot-gradle-plugin"]
    }
}

apply plugin: "io.spring.dependency-management"
apply plugin: "org.springframework.boot"

bootJar {
    baseName = 'capsule-gateway'
    version =  '1.0.0'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:Greenwich.SR1"
    }
}

dependencies {
    //compile project (":capsule-web-simple-dependency")
    //implementation "org.springframework.boot:spring-boot-starter-web"
    testImplementation "org.springframework.boot:spring-boot-starter-test"

    //集成依赖
    compile("org.springframework.cloud:spring-cloud-starter-gateway")
    compile("org.springframework.cloud:spring-cloud-starter-netflix-hystrix")
    compile("org.springframework.cloud:spring-cloud-starter-contract-stub-runner"){
        exclude group: "org.springframework.boot", module: "spring-boot-starter-web"
    }
}

注意:需要去掉spring-boot-starter-web的依赖

路由配置

CapsuleGatewayApplication

package com.example.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = "com.example")
public class CapsuleGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(CapsuleGatewayApplication.class, args);
    }
}

RouterConfiguration

/*
 * @ProjectName: 编程学习
 * @Copyright:   2019 HangZhou xiazhaoyang Dev, Ltd. All Right Reserved.
 * @address:     http://xiazhaoyang.tech
 * @date:        2019/3/26 07:42
 * @email:       xiazhaoyang@live.com
 * @description: 本内容仅限于编程技术学习使用,转发请注明出处.
 */
package com.example.gateway.router;

import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * <p>
 *
 * </p>
 *
 * @author xiazhaoyang
 * @version v1.0.0
 * @date 2019/3/26 07:42
 * @modificationHistory=========================逻辑或功能性重大变更记录
 * @modify By: {修改人} 2019/3/26
 * @modify reason: {方法名}:{原因}
 * ...
 */
@Configuration
public class RouterConfiguration {

    @Bean
    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p->p.path("/get")
                        .filters(f->f.addRequestHeader("Hello","World"))
                        .uri("http://httpbin.org:80")
                )
                .build();
    }

}

测试网关

访问curl http://localhost:8080/get

返回:

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Forwarded": "proto=http;host=\"localhost:8080\";for=\"0:0:0:0:0:0:0:1:55727\"", 
    //通过Filter添加的Header
    "Hello": "World", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/7.54.0", 
    "X-Forwarded-Host": "localhost:8080"
  }, 
  "origin": "0:0:0:0:0:0:0:1, 115.198.0.193, ::1", 
  "url": "https://localhost:8080/get"
}

设置网关跳转到自己开发的应用

@Bean
public RouteLocator myRoutes(RouteLocatorBuilder builder) {
    return builder.routes()
            .route(p->p.path("/get")
                    //过滤路由并添加Header参数
                    .filters(f->f.addRequestHeader("Hello","World"))
                    .uri("http://httpbin.org:80"))
            //跳转到自定义服务的路由网关
            .route(p->p.path("/capsule-flowable/demo/hi")
                    .uri("http://localhost:8081"))
            .build();
}
/*
 * @ProjectName: 编程学习
 * @Copyright:   2019 HangZhou xiazhaoyang Dev, Ltd. All Right Reserved.
 * @address:     http://xiazhaoyang.tech
 * @date:        2019/3/26 06:59
 * @email:       xiazhaoyang@live.com
 * @description: 本内容仅限于编程技术学习使用,转发请注明出处.
 */
package com.example.web;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * <p>
 *
 * </p>
 *
 * @author xiazhaoyang
 * @version v1.0.0
 * @date 2019/3/26 06:59
 * @modificationHistory=========================逻辑或功能性重大变更记录
 * @modify By: {修改人} 2019/3/26
 * @modify reason: {方法名}:{原因}
 * ...
 */
@RestController
@RequestMapping(value="/demo")
public class HelloController {

    @RequestMapping("/hi")
    public String hi(){
        return "created by capsule-web-simply-dependency:" +
                new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+"\n";
    }
}
xiazhaoyang capsule-utils $ curl http://localhost:8080/capsule-flowable/demo/hi
created by capsule-web-simply-dependency:2019-03-27 07:53:20

REFERENCE

  • Spring官方开发指导文档
  • Spring Cloud Gateway 入门
  • Spring Cloud Gateway入门案例

本文分享自微信公众号 - 架构探险之道(zacsnz1314),作者:MasterYang

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-03-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • IntelliJ IDEA 最新破解教程

    先下载jar包 JetbrainsCrack.jar,把它放到你认为合适的文件夹内,我直接放在了安装目录 /Users/xiazhaoyang/Download...

    架构探险之道
  • Spring Boot 整合 Activiti 6.0.0 工作流引擎开发

    本教程基于Activiti 6.0.0 ,着力介绍工作流引擎Activiti6.0.0引擎和Spring Boot的整合开发,帮助初学者入门。

    架构探险之道
  • Docker 之 Jenkins自动化部署

    Docker搭建微服务自动部署 <架构探险之路>,让我们来看看如何实现基于Docker的Jenkins自动化部署。

    架构探险之道
  • SpringBoot 2.0 系列(三):流程详解(下)

    Spring Boot自动配置尝试根据添加的jar依赖项自动配置Spring应用程序。例如,如果 HSQLDB在我们的类路径上,并且我们没有手动配置任何数据库连...

    山禾说
  • SpringCloud系列第05节之服务消费Ribbon和Feign

    它可以在客户端配置 ribbonServerList(服务端列表),然后轮询请求以实现均衡负载

    wuweixiang
  • Feign的使用

    用户5927264
  • SpringCloud系列第06节之断路器Hystrix

    这样就有可能出现一个单元因为网络原因或自身问题而出现故障或延迟,导致调用方的对外服务也出现延迟

    wuweixiang
  • Android开启热点通过socket进行文件传输

    前言:最近在调研localonlyhotspot(本地热点),需要写一个demo来证明可以通过热点实现socket通信。经历重重波折终于搞定了,在这里做一个总结...

    用户7557625
  • springMVC

    springmvc中有专用于页面跳转的controller,不会对请求做任何处理,直接跳转页面:     <!-- 对处理请求的controller进行映射 -...

    yawn
  • SpringCloud 2.x学习笔记:10、断路器监控(Hystrix Dashboard)(Greenwich版本)

    Hystrix 已经停止开发了,Hystrix 官方推荐替代的开源组件:Resilience4j(感觉学不动啦) 除了 Resilience4j,还有Spri...

    程裕强

扫码关注云+社区

领取腾讯云代金券