Spring Boot Actuator - Невозможно отключить конечную точку / info

Я попытался отключить все конечные точки исполнительных механизмов для производственной среды в application.yml файле конфигурации:

endpoints.enabled: false

Он работает для всех конечных точек, кроме / info. Как я могу отключить все конечные точки для данной среды?

ОБНОВЛЕНИЕ:

Проект, над которым я работаю, также выступает в качестве клиента Eureka. В документации по Spring Cloud Netflix в разделе Страница состояния и индикатор работоспособности (http://cloud.spring.io/spring-cloud-netflix/spring-cloud-netflix.html) он говорит, что "экземпляр Eureka по умолчанию" / info "и" / health " соответственно".

Есть ли какое-нибудь решение для отключения этих конечных точек?

Мне удалось отключить конечную точку / health с помощью endpoints.enabled: false, но не конечную точку / info.


person Saša    schedule 21.12.2015    source источник
comment
Единственным вариантом может быть защита конечной точки. Отключение в производстве кажется странным выбором, поскольку вы отключаете возможность использования привода.   -  person code    schedule 22.12.2015
comment
Мне удалось защитить конечную точку / info с помощью дополнительной конфигурации веб-безопасности (которая работает вместе с конфигурацией безопасности привода по умолчанию). Что мне не нравится, так это то, что все конечные точки привода, кроме / info, могут быть защищены конфигурацией привода, то есть management.security.enabled: true. Но для защиты конечной точки / info мне нужно создать отдельную конфигурацию веб-безопасности только для этой конечной точки. Похоже, я немного взламываю код.   -  person Saša    schedule 22.12.2015


Ответы (2)


Наконец-то мне удалось решить свою проблему. Я включил в актуаторе только конечные точки / info и / health. А чтобы разрешить доступ к конечной точке / info только пользователям с ролью ADMIN, мне нужно было смешать безопасность управления исполнительными механизмами и конфигурацию безопасности Spring.

Итак, мой application.yml выглядит так:

endpoints.enabled: false

endpoints:
    info.enabled: true
    health.enabled: true

management.security.role: ADMIN

И весенняя конфигурация безопасности, подобная этой (где мне нужно было изменить порядок ManagementSecurityConfig, чтобы иметь более высокий приоритет):

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfiguration {


    @Configuration
    protected static class AuthenticationSecurity extends GlobalAuthenticationConfigurerAdapter {

        @Autowired
        private AuthenticationProvider authenticationProvider;

        public AuthenticationSecurity() {
            super();
        }

        @Override
        public void init(AuthenticationManagerBuilder auth) throws Exception {
             auth.inMemoryAuthentication().withUser("admin").password("secret").roles("ADMIN");
        }
    }

    @Configuration
    @Order(Ordered.HIGHEST_PRECEDENCE + 2)
    public static class ManagementSecurityConfig extends WebSecurityConfigurerAdapter {


        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.csrf().disable()
                    .requestMatchers()
                    .antMatchers("/info/**")
                    .and()
                    .authorizeRequests()
                    .anyRequest().hasRole("ADMIN")
                    .and()
                    .httpBasic();
        }
    }

    @Configuration
    public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {

        protected void configure(HttpSecurity http) throws Exception {
            // API security configuration
        }

    }
}
person Saša    schedule 24.12.2015

Ваш образец конфигурации мне кажется подозрительным. Я думаю ты имел в виду

endpoints:
  enabled: true

В любом случае, я просто попытался добавить это в обычное приложение Spring Boot (используя 1.3.1, и все конечные точки были отключены (как и ожидалось).

person Stephane Nicoll    schedule 22.12.2015
comment
Я только что обновил свой вопрос. Дело в том, что в проекте также используется Эврика. В любом случае мне нужно отключить конечные точки, поэтому мне нужно установить для конечных точек значение false, то есть endpoints.enabled: false. Дело в том, что это работает для конечной точки / health, но не для / info. - person Saša; 22.12.2015