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

+ Recent posts