首页 > 其他分享 >Eureka加密 及Gateway搭建 - 基于SpringBoot不同版本配置方式

Eureka加密 及Gateway搭建 - 基于SpringBoot不同版本配置方式

时间:2025-01-07 12:06:10浏览次数:3  
标签:http SpringBoot spring springframework Eureka org eureka Gateway

前言:在最近开发过程中 偶遇根据SpringBoot不同版本导致配置方式不一致等问题

通用:Eureka服务配置 Server端:

一、引入依赖 spring-boot-starter-security
<dependencies>
	<!-- Eureka 声明依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <!-- 使用 security 加密 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
</dependencies>
二、配置 application.yml
spring:
  security:
    user:
      name: xxx
      password: yyy
三、启动类声明 Eureka 注解
@SpringBootApplication(scanBasePackages = "config配置文件目录")
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

区别:

一、使用 SpringBoot 老版本:
配置如下:
  1. JDK 1.8
  2. SpringBoot 1.5.2.RELEASE
  3. SpringCloud 1.2.2.RELEASE
配置方式:继承 WebSecurityConfigurerAdapter 类 并重写 configure 方法(通过重写这个方法 可以重新自定义安全策略)
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 禁用 CSRF
        http.csrf().disable();
        // 如果需要禁用 CSRF,但又想确保安全性,可以考虑使用以下替代方案
        // http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
        super.configure(http);
    }

}
二、使用 SpringBoot 新版本
配置如下:
  1. JDK 21
  2. SpringBoot 3.4.1
  3. SpringCloud 2024.0.0
配置方式:跟老版本不同的是 不需要去继承并重写 仅需单独注册一个Bean文件 通过表达式方式进行单独配置
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class WebSecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .csrf(csrf -> csrf.disable()) // 禁用 CSRF
                .authorizeHttpRequests(authorize -> authorize
                        .requestMatchers("/eureka/**").authenticated() // 对 Eureka 路径启用认证
                        .anyRequest().permitAll() // 允许其他请求
                )
                .httpBasic(httpBasic -> {}); // 新方式启用 HTTP Basic
        return http.build();
    }
}

测试:创建 Eureka Client 端 进行服务注册(Gateway举例)

一、引入依赖 spring-boot-starter-security
<dependencies>
	<!-- Spring Cloud Gateway -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!-- Eureka Client -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        
        <!-- Spring Boot Starter -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
</dependencies>
二、配置 application.yml(核心配置:defaultZone: http://设置的账号:设置的密码@localhost:60001/eureka/)
server:
  port: 60003
spring:
  application:
    name: xxxx-gateway # 服务名,将在 Eureka 中注册
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true # 启用动态路由
          lower-case-service-id: true
      global-cors: # 配置跨域
        cors-configurations:
          '[/**]':
            allowedOrigins: "*"
            allowedMethods:
              - GET
              - POST
              - PUT
              - DELETE
            allowedHeaders: "*"
            allowCredentials: true
      routes:
        - id: xxx-base
          uri: lb://XXX-BASE # 使用服务名进行负载均衡访问
          predicates:
            - Path=/base/**

eureka:
  client:
    service-url:
      defaultZone: http://xxx:yyy@localhost:60001/eureka/ # Eureka 服务注册中心地址
    register-with-eureka: true # 是否注册到 Eureka
    fetch-registry: true # 是否从 Eureka 拉取注册表
  instance:
    prefer-ip-address: true # 使用 IP 注册

logging:
  level:
    org.springframework.cloud.gateway: DEBUG
三、启动类声明注解
@SpringBootApplication
@EnableDiscoveryClient
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

需要特别注意报错原因:

  1. JDK、Springboot、SpringCloud 版本不兼容 启动报错 解决方式:https://spring.io/projects/spring-cloud#learn 在其中查看对应版本信息
  2. 账户密码设置错误
  3. Client端配置错误 举例:原本配置仅用 defaultZone: http://localhost:60001/eureka/ 既可 而如果使用 Eureka加密后 则需要 defaultZone: http://xxx:yyy@localhost:60001/eureka/ 区别为 xxx:yyy@(xxx为账户 yyy为密码 中间需要使用:冒号隔开 并在输入完成后 使用@符号进行确认)
  4. 未配置 Config 类

成功案例如下:启动Eureka和Gateway后 通过浏览器方式进入 http://localhost:60001/eureka/ 后发现 Client端 成功注册既可

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

标签:http,SpringBoot,spring,springframework,Eureka,org,eureka,Gateway
From: https://blog.csdn.net/xxiaobaibaibai/article/details/144982203

相关文章