본문 바로가기

개발(합니다)/Java&Spring

[spring boot 설정하기-12] admin(+security) 설정 및 테스트 소스

반응형

actoator를 웹에서 확인할 수 있는 기능으로 제공되는 기능으로 SBA(spring boot admin)을 제공합니다.

문자가 아닌 그림으로 확인할 수 있습니다.

관련 정보는 아래 사이트에서 확인할 수 있습니다.

codecentric.github.io/spring-boot-admin/current/#getting-started

www.baeldung.com/spring-boot-admin

시큐리티가 적용되어 있는 상태에서 하면 조금 복잡한 감이 있어서 새로운 프로젝트를 생성하여 진행합니다.


1. Server 

 

1-1. 의존성 주입

server-ui는 없어도 기본적으로 server에서 ui를 제공해줍니다.

    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'de.codecentric:spring-boot-admin-starter-server:2.4.1'
//    implementation 'de.codecentric:spring-boot-admin-server-ui:2.4.1'
    implementation 'org.springframework.boot:spring-boot-starter-security'

 

1-2. application.yml 설정

server에서 사용할 name, password를 설정합니다.

이 부분은 시큐리티를 이용합니다.

server:
  port: 8080

spring:
  security:
    user:
      name: admin
      password: admin

1-3. BootAdminServerApplication.java

@EnableAdminServer을 추가합니다.

package com.otrodevym.bootadminserver;

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableAdminServer
public class BootAdminServerApplication {

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

}

 

1-4. SecurityConfig.java

AdminServerProperties를 의존 주입해주고 시큐리티를 적용합니다.

.antMatchers(HttpMethod.GET, "/actuator/**").permitAll() 모든 actuator를 허용합니다.

package com.otrodevym.bootadminserver;

import de.codecentric.boot.admin.server.config.AdminServerProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
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;




@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {


    private final AdminServerProperties adminServerProperties;

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


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        String contextPath = this.adminServerProperties.getContextPath();

        SavedRequestAwareAuthenticationSuccessHandler successHandler =
                new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setTargetUrlParameter("redirectTo");
        successHandler.setDefaultTargetUrl("/");


        http.authorizeRequests()
                .antMatchers(contextPath + "/assets/**").permitAll()
                .antMatchers(contextPath + "/login").permitAll()
                .antMatchers(HttpMethod.GET, "/actuator/**").permitAll()
                .anyRequest().authenticated()
                .and()
                .formLogin().loginPage(contextPath + "/login").successHandler(successHandler).and()
                .logout().logoutUrl(contextPath + "/logout").and()
                .httpBasic().and()
                .csrf()
                .csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())
                .ignoringAntMatchers(
                        contextPath + "/instances",
                        contextPath + "/actuator/**"
                );

    }
}

 

1-5. Spring Boot Admin Server 구동

위에 입력했던 admin/admin을 입력하여 접속합니다.

아직 client가 없어서 접속 된 애플리케이션은 없습니다.

 

2. Client

2-1. 의존성 주입

    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'de.codecentric:spring-boot-admin-starter-client:2.4.1'

2-2. application.yml

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

2-3. Spring Boot Admin Client 구동

client가 구동되어 server에서 목록이 표시되는걸 확인할 수 있습니다.

애플리케이션과 대시보드입니다.

대시보드에서 원하는 인스턴스를 선택하면 관련 재원을 다 볼 수 있습니다.

간혹 재원이 보이지 않는 경우에는 server에서의 actuator의 경로나 client에서의 환경 설정의 문제입니다.

client에서 server URL과 인스턴스 client URL이 맞아야 하며 아래처럼 모든 정보를 표시해야 합니다.

 

management:
  endpoints:
    web:
      exposure:
        include: "*"

 

반응형