idea+spring boot+spring cloud+eureka+gateway整合

1、创建一个maven项目

idea+spring boot+spring cloud+eureka+gateway整合

next

idea+spring boot+spring cloud+eureka+gateway整合

Next

idea+spring boot+spring cloud+eureka+gateway整合

Finish完成.

2、在创建好的maven项目上右键New->Module

idea+spring boot+spring cloud+eureka+gateway整合

选择Spring initializr创建eureka注册中心

idea+spring boot+spring cloud+eureka+gateway整合

Next

idea+spring boot+spring cloud+eureka+gateway整合

Next

idea+spring boot+spring cloud+eureka+gateway整合

Next

idea+spring boot+spring cloud+eureka+gateway整合

Finish.

打开eureka-service项目下的application.properties配置文件,将.properties重命名为.yml,配置如下

server:
  port: 8001 #端口号

spring:
  application:
    name: eureka-service #服务名称

eureka:
  instance:
    hostname: localhost
  client:
    fetch-registry: false #是否从Eureka Server获取注册信息
    register-with-eureka: false #是否将自己注册到Eureka Server
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ # 服务地址

然后启动类中增加@EnableEurekaServer注解就可以了

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

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

}

启动,浏览器输入http://localhost:8001看到如下内容说明配置成功

idea+spring boot+spring cloud+eureka+gateway整合

3、创建服务提供者

cloud-demo右键->New->Module 重复第二步时的过程,只是选择下图项目创建

idea+spring boot+spring cloud+eureka+gateway整合

完成后打开pom.xml增加如下配置

xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    <parent>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-parentartifactId>
            <version>2.2.1.RELEASEversion>
            <relativePath/>
        parent>
    <artifactId>admin-apiartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>admin-apiname>
    <description>admin apidescription>

    <properties>
        <java.version>1.8java.version>
        <spring-cloud.version>Hoxton.SR1spring-cloud.version>
    properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
        dependency>

            org.springframework.boot
            spring-boot-starter-web

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintagegroupId>
                    <artifactId>junit-vintage-engineartifactId>
                exclusion>
            exclusions>
        dependency>

    dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>${spring-cloud.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>
        dependencies>
    dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
        plugins>
    build>

project>

配置文件application.yml配置

server:
    port: 8081 #端口
spring:
    application:
        name: customer-center #服务名称

eureka:
    client:
        service-url:
            defaultZone: http://localhost:8001/eureka/ #注册中心地址

启动,刷新注册中心

idea+spring boot+spring cloud+eureka+gateway整合

成功。

4、创建gateway服务

重复之前的创建过程,选择Spring Cloud Routing->GateWay

idea+spring boot+spring cloud+eureka+gateway整合

创建完成后pom.xml增加如下内容

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

        org.springframework.boot
        spring-boot-starter-parent
        2.2.1.RELEASE

    com.xxxxxx
    getway
    0.0.1-SNAPSHOT
    getway
    getway

        1.8
        Hoxton.SR1

            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client

            org.springframework.cloud
            spring-cloud-starter-gateway
            2.2.1.RELEASE

            org.springframework.boot
            spring-boot-starter-test
            test

                    org.junit.vintage
                    junit-vintage-engine

            org.projectlombok
            lombok

            com.baomidou
            mybatis-plus-boot-starter

                    HikariCP
                    com.zaxxer

                org.springframework.cloud
                spring-cloud-dependencies
                ${spring-cloud.version}
                pom
                import

                org.springframework.boot
                spring-boot-maven-plugin

配置文件application.yml

server:
  port: 8002 # 服务端口
spring:
  application:
    name: gateway-service # 服务名称

  cloud:
    gateway:
      routes:
        - id: customer
          uri: lb://admin-api #eureka注册中心存在的服务名称
          predicates:
            - Path=/api/customer/** #路径配置
          filters:
           - StripPrefix=1     #忽略Path配置的个数,此处为1代表访问/api/customer/**时,会将api忽略,真实的访问地址为lb://admin-api/customer/**,如果为2,则为lb://admin-api/**

在customer-center中创建一个controller类提供一个简单的服务接口

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

@RestController
@RequestMapping(value = "customer")
public class UserController {
  @GetMapping(value = "user")
  public String user(){
    return "user";
  }
}

启动gateway服务

在浏览器中输入http://localhost:8002/api/customer/user和http://localhost:8081/customer/user得到的结果项目,说明配置成功

5、编写gateway过滤器

第一种:使用全局GlobalFilter过滤器

创建AuthorizeFilter类,只需要有@Component注解就可以了

package com.fulugame.filter;

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

/**
 * Created by ShiJiaoYun on 2020/5/13.

 */
@Component
@Slf4j
public class AuthorizeFilter  implements GlobalFilter, Ordered {

    private static final String AUTHORIZE_TOKEN = "token";

    @Override
    public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("使用filter");
        ServerHttpRequest request = exchange.getRequest();
        HttpHeaders headers = request.getHeaders();
        String token = headers.getFirst(AUTHORIZE_TOKEN);
        if (null == token){
            token=request.getQueryParams().getFirst(AUTHORIZE_TOKEN);
        }
        ServerHttpResponse response = exchange.getResponse();
        if (StringUtils.isEmpty(token)){
            response.setStatusCode(HttpStatus.UNAUTHORIZED);
            return  response.setComplete();
        }
        return chain.filter(exchange);
    }

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

然后再通过http://localhost:8002/api/customer/user和http://localhost:8002/api/customer/user?token=12121访问就会有两种不同结果

这样同样可以实现过滤器效果

Original: https://www.cnblogs.com/shijiaoyun/p/12889726.html
Author: 何石-博客
Title: idea+spring boot+spring cloud+eureka+gateway整合

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/540034/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java HashMap深入理解增删改查 源码学习 学习笔记

    Java源码解读(三)— HashMap深入理解之增删查改 学习地址:[HashMap深入理解之增删查改]: https://blog.csdn.net/dongmuyang/ar…

    Java 2023年6月5日
    0104
  • Leetcode刷题笔记(双指针)

    双指针主要用来遍历数组,两个指针指向不同的元素,从而协同完成任务。我们也可以类比这个概念,推广到多个数组的多个指针。 若两个指针指向同一数组,遍历方向相同且不会相交,可以称之为 滑…

    Java 2023年6月7日
    071
  • Spring Security OAuth 2.x的刷新token接口/oauth/token自定义修改

    参考资料: Spring Security OAuth 2.x的刷新token方法自定义修改 使用maven依赖: 需求: 旧项目的其中一个前端页面会频繁调用token刷新方法。 …

    Java 2023年5月30日
    062
  • Java 8 Lambda表达式介绍(二)

    接着上篇内容 函数式编程接口 从上面的代码例子可以看出,我们使用Lambda表达式创建线程的时候, 并不关心接口名,方法名,参数名。我们 只关注他的参数类型,参数个数,返回值。 J…

    Java 2023年5月29日
    062
  • StatementHandler-Mybatis源码系列

    内容更新github地址:我飞 StatementHandler接口 StatementHandler封装了Mybatis连接数据库操作最基础的部分。因为,无论怎么封装,最终我们都…

    Java 2023年6月14日
    095
  • springboot+logback日志规范

    <!–?</code–><code class=”xml keyword”>xml</code> <code class=”xm…

    Java 2023年5月30日
    058
  • java的定时器

    定时器其实就是一个线程 可以在线程中用暂定实现,也可以用以下方法 // &#x5B9A;&#x4E49;&#x4E00;&#x4E2A;&#…

    Java 2023年6月13日
    065
  • 原来你是这样的JAVA[02]-包、传参、构造器

    在java程序中,一个java源文件称为编译单元,以.java后缀命名。编译单元内可以有一个public类,类名必须与文件名相同。注意:每个编译单元只能有一个public类。 在C…

    Java 2023年5月29日
    056
  • 用两行代码实现重试功能,spring-retry真是简单而优雅

    最近做的一个需求,需要调用第三方接口。正常情况下,接口的响应是符合要求的,只有在网络抖动等极少数的情况下,会存在超时情况。因为是小概率事件,所以一次超时之后,进行一次重试操作应该就…

    Java 2023年6月5日
    081
  • 微信扫码登录

    微信登录之前还需要了解OAuth2知识 前期准备 注册微信开放平台 邮箱激活 完善开发者资料(暂不支持个体用户) 开发者资质认证: &#x8425;&#x4E1A;…

    Java 2023年6月13日
    087
  • 共读《redis设计与实现》-数据结构篇

    准备将之前攒下的书先看一遍,主要是有个大概的了解,以后用的时候也知道在哪里找。所以准备开几篇共读的帖子,激励自己多看一些书。 Redis 基于 &#x7B80;&#…

    Java 2023年6月7日
    080
  • 字典生成

    crunch的使用 依然是熟悉的console-crunch-xxx min:设定最小字符串长度 max:设定最大字符串长度 -o:将生成的字典保存到指定文件 -t:指定密码输出的…

    Java 2023年6月7日
    080
  • HTTP Study

    定义:在两点之间传输文本,视频,图片等超文本数据的协议和规范 HTTP风险 通信使用明文,https通过信息加密(混合加密)解决 无法验证报文的完整性,https通过校验机制(摘要…

    Java 2023年6月8日
    073
  • Elasticsearch必备原理理解

    Elasticsearch读写原理 心得: 主分片、副本分片的存在类似各大组件的”主从结构”,需要注意的是,Elasticsearch的写入是针对 主分片,…

    Java 2023年6月6日
    079
  • Spring Boot 通过RestTemplat返回pdf转图片

    Springboot 通过 RestTemplat 返回 pdf转图片 开发环境: java 8 spring boot 2.x 前后端分离 需求:前端发送pdf文件路径来,后端获…

    Java 2023年6月5日
    058
  • Java中的并发队列

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月7日
    073
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球