SMALL

Spring Boot Admin 화면을 통해서 Spring Application들의 상태 정보를 조회하고, 설정 정보를 변경할 수 있다.

이러한 경우에 허용되지 않은 User가 해당 동작을 수행하게 된다면 안될것이다.

그렇기 때문에 SpringBootAdmin에 Security를 추가하는 내역을 알아보도록 하자. 

기본적으로 Spring에서 제공하는 Security의 기능을 사용해보도록 하겠다.

 

각각의 추가되는 설정 정보는 기존에 Spring Boot Admin 설정이 완료된 상태에서 Security 설정을 추가한다는 기준으로 설명을 한다고 생각하면 된다.

( 이전의 설정 내역 정리 : https://joomn11.tistory.com/68 )

 

Server-Side

pom.xml ( dependency 설정 ) 

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>

 

application.properties ( spring boot 설정 )

server.port=8000
spring.security.user.name=admin #Added!
spring.security.user.password=admin #Added!
management.endpoints.web.exposure.include=*

 

Security 관련 설정 추가

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
	private final AdminServerProperties adminServer;

    public SecurityConfig(AdminServerProperties adminServer) {
        this.adminServer = adminServer;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl(this.adminServer.path("/"));

        http.authorizeRequests()
            .antMatchers(this.adminServer.path("/assets/**")).permitAll() 
            .antMatchers(this.adminServer.path("/login")).permitAll()
            .anyRequest().authenticated() 
            .and()
        .formLogin().loginPage(this.adminServer.path("/login")).successHandler(successHandler).and() 
        .logout().logoutUrl(this.adminServer.path("/logout")).and()
        .httpBasic().and() 
        .csrf()
            .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()) 
            .ignoringAntMatchers(
                this.adminServer.path("/instances"), 
                this.adminServer.path("/actuator/**") 
            );
    }
}

 

Security 관련 설정은 Spring Boot Admin 자체의 설정이 아니고 Spring에서 제공하는 Security를 사용하기 위한 설정이므로 Spring Security에 대한 지식이 필요하다.

( 현재 설정한 코드는 다른 블로그에 내용을 참고한 것이다 : https://jaehyun8719.github.io/2019/06/20/springboot/admin/)

 

이렇게 설정이 완료된 후에 spring-boot-admin의 server-side를 띄워보면 아래와 같은 login화면을 마주 할 수 있게 된다.

 

Client-Side

그럼 다음으로 security를 사용하기 위한 client-side의 설정을 보도록 하자.

 

먼저 Security관련 설정을 추가하지 않은 경우에 어떻게 되는지 보자.

분명 Client Application을 띄웠는데도 Spring Boot Admin 화면에 나타나지 않게 된다.

Log 내용을 자세하게 보면 아래와 같은 내용이 찍히게 된다.

 

WARN 43396 --- [gistrationTask1] d.c.b.a.c.r.ApplicationRegistrator : Failed to register application as Application(name=spring-boot-application, managementUrl=http://localhost:8089/actuator, healthUrl=http://localhost:8089/actuator/health, serviceUrl=http://localhost:8089) at spring-boot-admin ([http://localhost:8000/instances]): 401 : [no body]. Further attempts are logged on DEBUG level

Server-Side의 Security관련 설정이 있기 때문에 Spring-Boot-Admin에 제대로 등록이 되지 않게 된다.

 

application.properties ( spring boot 설정 )

server.port=8089
spring.boot.admin.client.url=http://localhost:8000
spring.boot.admin.client.instance.service-url=http://localhost:8089
spring.boot.admin.client.instance.metadata.user.name=admin #Added !
spring.boot.admin.client.instance.metadata.user.password=admin #Added !
spring.boot.admin.client.username=admin #Added !
spring.boot.admin.client.password=admin #Added !
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

위와 같이 spring boot admin server-side에 설정된 login정보를 설정해주어야 정상적으로 server에 해당 application이 등록되고 해당 정보를 조회할 수 있었다.

 

 

 

 

 

 

LIST
SMALL

Spring Boot Admin이란

On-premise 환경 구성 ( Server, Client )

 

Spring Boot application의 관리 및 모니터링 화면을 제공하는 툴 

해당 화면에 보여지는 정보는 Spring Boot Actuator를 통해 받은 정보이다. 

https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html

 

Spring Boot Admin은 On-premise 환경뿐만 아니라, Cloud 환경에서도 사용이 가능하다.

각각의 환경에서 Spring Boot Admin을 사용하기 위해서 설정해야 하는 것들을 알아보도록 하자.

 

Spring Boot Admin은 크게 Server, Client Side로 구분된다. 

먼저, On-premise 환경에서의 Spring Boot Admin을 사용하기 위한 설정을 살펴보자.

 

Server-Side

 

pom.xml ( dependency 설정 )

		<dependency>
			<groupId>de.codecentric</groupId>
			<artifactId>spring-boot-admin-starter-server</artifactId>
			<version>2.3.1</version>
		</dependency>

 

application.properties ( spring boot 설정 )

server.port=8000
management.endpoints.web.exposure.include=*

 

Spring Main Application 

@SpringBootApplication
@EnableAdminServer
@EnableAutoConfiguration
public class SbaServerApplication {

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

}

크게 이렇게 3가지의 설정이 존재한다.

 

Client-Side

 

pom.xml ( dependency 설정 )

		<dependency>
			<groupId>de.codecentric</groupId>
			<artifactId>spring-boot-admin-starter-client</artifactId>
			<version>2.3.1</version>
		</dependency>

 

application.properties ( spring boot 설정 )

server.port=8089
spring.boot.admin.client.instance.service-url=http://localhost:8089
spring.boot.admin.client.url=http://localhost:8000
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

 

실행 내역 확인

spring-boot-admin의 server-side 내역만 실행한 경우의 내역

 

spring-boot-admin의 client-side 내역 실행한 경우

 

 

그럼 다음으로는 On-Premise환경에서 Security를 추가하는 방법을 알아보도록 하겠다.

 

코드를 보관하는 git-hub 주소

https://github.com/joomn11/spring-boot-admin-repo

LIST

+ Recent posts