Spring Boot Admin 배 갱 안내
이 블 로 그 는 개인 적 으로 Spring Boot Admin 을 사용 하 는 과정 에서 만난 구 덩이 를 기록 하고 모든 구 덩이 는 상세 한 구 덩이 를 메 우 는 방법 을 첨부 합 니 다.
환경 매개 변수:
서비스 직접 등록 실패
흔히 볼 수 있 는 등록 실패 문 제 는 다음 과 같은 두 가지 로 나 눌 수 있다.
클 라 이언 트 에 boot. admin. client. intance. service - url 속성 을 설정 하여 Spring Boot Admin 서버 에서 네트워크 를 통 해 클 라 이언 트 의 데 이 터 를 가 져 올 수 있 도록 해 야 합 니 다 (그렇지 않 으 면 기본 값 은 호스트 이름 으로 가 져 옵 니 다)
boot:
admin:
client:
url: ${your spring boot admin url}
username: ${your spring boot admin username}
password: ${your spring boot admin password}
instance:
prefer-ip: true
service-url: ${your spring boot client url}
두 번 째 문제 의 해결 방법:
우선, 안전 검사 문 제 는 바로 현재 서버 에서 계 정 비밀 번 호 를 설정 한 다음 에 클 라 이언 트 가 등록 할 때 계 정 비밀 번 호 를 제공 하여 로그 인하 여 검 사 를 완성 하 는 것 이다.
이 과정의 실현 은 Spring 온 가족 통 프로젝트 로 Spring Security 를 사용 하여 해결 하 는 것 을 추천 하기 때문에 검증 에 실패 하면 대부분 Spring Security 의 배치 에 문제 가 생 긴 다.
다음은 서버 와 클 라 이언 트 를 각각 설정 하여 이 문 제 를 처리 하 는 방법 을 소개 합 니 다.
서버 설정
Maven 을 통 해 Spring Security 의존 도 를 불 러 옵 니 다.
org.springframework.boot
spring-boot-starter-security
서버 의 사용자 이름과 비밀 번 호 를 설정 합 니 다. (클 라 이언 트 가 등록 할 때 이 계 정 비밀 번 호 를 사용 하여 로그 인 합 니 다)
spring:
security:
user:
name: liumapp
password: superliumapp
Spring Security 설정 클래스 작성
import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;
import org.springframework.security.web.csrf.CookieCsrfTokenRepository;
/**
* file SecuritySecureConfig.java
* author liumapp
* github https://github.com/liumapp
* email [email protected]
* homepage http://www.liumapp.com
* date 2018/11/29
*/
@Configuration
public class SecuritySecureConfig extends WebSecurityConfigurerAdapter {
private final String adminContextPath;
public SecuritySecureConfig(AdminServerProperties adminServerProperties) {
this.adminContextPath = adminServerProperties.getContextPath();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
successHandler.setTargetUrlParameter("redirectTo");
successHandler.setDefaultTargetUrl(adminContextPath + "/");
http.authorizeRequests()
.antMatchers(adminContextPath + "/assets/**").permitAll()
.antMatchers(adminContextPath + "/login").permitAll()
.anyRequest().authenticated()
.and()
.formLogin().loginPage(adminContextPath + "/login").successHandler(successHandler).and()
.logout().logoutUrl(adminContextPath + "/logout").and()
.httpBasic().and()
.csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
.ignoringAntMatchers(
adminContextPath + "/instances",
adminContextPath + "/actuator/**"
);
// @formatter:on
}
}
위의 코드 는 Admin Server Properties 류 에 주의 하 셔 야 합 니 다. 일부 소스 코드 를 탐색 하 십시오.
@ConfigurationProperties("spring.boot.admin")
public class AdminServerProperties {
/**
* The context-path prefixes the path where the Admin Servers statics assets and api should be
* served. Relative to the Dispatcher-Servlet.
*/
private String contextPath = "";
/**
* The metadata keys which should be sanitized when serializing to json
*/
private String[] metadataKeysToSanitize = new String[]{".*password$", ".*secret$", ".*key$", ".*$token$", ".*credentials.*", ".*vcap_services$"};
/**
* For Spring Boot 2.x applications the endpoints should be discovered automatically using the actuator links.
* For Spring Boot 1.x applications SBA probes for the specified endpoints using an OPTIONS request.
* If the path differs from the id you can specify this as id:path (e.g. health:ping).
*/
private String[] probedEndpoints = {"health", "env", "metrics", "httptrace:trace", "httptrace", "threaddump:dump", "threaddump", "jolokia", "info", "logfile", "refresh", "flyway", "liquibase", "heapdump", "loggers", "auditevents", "mappings", "scheduledtasks", "configprops", "caches", "beans"};
// ...
}
Admin ServerProperties 가 Spring Boot Admin 의 설정 속성 을 정의 하 는 것 을 발견 할 수 있 습 니 다. 로그 인 도 그 중의 하나 입 니 다. 따라서 저 희 는 Spring Security 설정 류 를 작성 할 때 Admin ServerProperties 를 도입 해 야 합 니 다.
여기까지 Spring Boot Admin 서버 에서 Spring Security 에 대한 설정 이 끝 났 습 니 다. 클 라 이언 트 의 Security 설정 을 시작 하 겠 습 니 다.
클 라 이언 트 설정
우선 클 라 이언 트 에 대해 저 희 는 Spring Boot Admin Client 의존 외 에 Spring Security 의존 도 를 추가 로 도입 해 야 합 니 다.
de.codecentric
spring-boot-admin-starter-client
2.0.2
org.springframework.boot
spring-boot-starter-security
이 를 바탕 으로 클 라 이언 트 application. yml 프로필 을 작성 하여 계 정 비밀 번 호 를 설정 합 니 다.
spring:
boot:
admin:
client:
url: ${your sba server url}
username: ${your sba username}
password: ${your sba password}
instance:
service-base-url: ${your client url}
다음은 클 라 이언 트 의 Spring Security 를 설정 하여 서버 에서 actuator 가 노출 된 데 이 터 를 읽 을 수 있 도록 합 니 다.
설정 클래스 추가:
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
public class SecurityPermitAllConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll()
.and().csrf().disable();
}
}
여기 서 안전 검증 으로 등록 에 성공 하지 못 하 는 문 제 를 해결 할 수 있다.
로그 인 에 성 공 했 지만 로 그 를 표시 할 수 없습니다.
이 문제 의 발생 원인 은 두 가지 가 있다.
logging:
file: ./log/client.log
pattern:
file: "%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p) %clr(${PID}){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n%wEx"
두 번 째 상황 은 비교적 복잡 하 다. 먼저 어떤 도구 로 용 기 를 배치 하 는 지 나 누 어야 하지만 일반적으로 파일 을 통 해 직접 매 핑 하면 된다.
docker 의 경우 docker 에서 volumes 를 설정 하여 로그 파일 을 매 핑 합 니 다.
volumes:
- ./log:/client/log/
등록 은 성 공 했 지만 정보 표시 가 완전 하지 않 습 니 다.
가끔 이런 경우 도 있 습 니 다. Spring Boot Admin 클 라 이언 트 등록 서버 는 성공 적 이지 만 통계 페이지 에 표 시 된 데이터 가 너무 적 습 니 다 (로그 란 만 있 을 수 있 습 니 다)
이러한 문 제 를 일 으 킨 이 유 는 클 라 이언 트 의 actuator 인터페이스 주 소 를 서버 에 방문 하지 않 았 기 때문이다.
그러면 해결 방법 도 간단 합 니 다. 서버 에서 actuator 를 방문 할 수 있 도록 허락 하면 됩 니 다.
우선 프로젝트 에 actuator 의존 이 있 는 지 확인 해 야 합 니 다. (일반적으로 spring - boot - admin - starter - client 자체 에 이 의존 이 포함 되 어 있 기 때문에 추가 로 도입 할 필요 가 없습니다)
org.springframework.boot
spring-boot-starter-actuator
그리고 actuator 포트 를 열 어 client 엔 드 설정 파일 에 다음 과 같은 내용 을 추가 합 니 다.
management:
endpoints:
web:
exposure:
include: "*"
또한 client 와 server 도 메 인 이름 이 다른 상황 이 존재 하 는 것 을 고려 하여 도 메 인 간 도 메 인 을 해결 하고 도 메 인 간 설정 류 를 추가 합 니 다.
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author liumapp
* @file CorsConfig.java
* @email [email protected]
* @homepage http://www.liumapp.com
* @date 2018/8/11
*/
@Configuration
public class CorsConfig implements WebMvcConfigurer {
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowCredentials(true)
.allowedHeaders("*")
.allowedOrigins("*")
.allowedMethods("*");
}
}
문 제 는 곧 해결 할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.