build.gradle:
plugins {
id 'java'
// spring 依赖管理插件
// https://plugins.gradle.org/plugin/io.spring.dependency-management
id 'io.spring.dependency-management' version '1.1.0'
// spring boot系列版本,不需最新,与mavenBom依赖的版本相同就好
id 'org.springframework.boot' version '3.2.6'
}
group = 'cn.beeson'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
ext {
set('springCloudVersion', "2023.0.2")
}
dependencyManagement {
// 导入spring cloud 的mavenBom,可以在https://mvnrepository.com找到最新版本
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
}
}
tasks.named('test') {
useJUnitPlatform()
}
application.yml:
server:
port: 9000
spring:
security:
# 浏览器访问注册中心的账号密码
user:
name: admin
password: 123456
application:
name: eureka-server
eureka:
instance:
hostname: localhost
client:
# 不在注册中心的控制面板上显示自己
registerWithEureka: false
fetchRegistry: false
# 其他微服务在注册中心注册的url格式
serviceUrl:
defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@${eureka.instance.hostname}:${server.port}/eureka/
注意入口类添加@EnableEurekaServer注解↓
package cn.beeson.eurekaserverdemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerDemoApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerDemoApplication.class, args);
}
}
在配置文件里关闭csrf,不然spring security会阻止其他服务向Eureka注册:
package cn.beeson.eurekaserverdemo.conf;
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.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import static org.springframework.security.config.Customizer.withDefaults;
@EnableWebSecurity
@Configuration
public class WebSecurityConfig2 {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
// 关闭csrf,确保其他服务可以注册
http.csrf().disable();
http.authorizeHttpRequests((authz) -> authz
.anyRequest().authenticated()
).httpBasic(withDefaults());
return http.build();
}
}
配置完成,启动服务,并访问http://localhost:9000,出现如下页面即成功: