Spring Boot 2.0.x отключить безопасность для определенного профиля

В Spring Boot 1.5.x у меня была настроена безопасность, и в некоторых профилях (например, локальных) я добавил строку security.basic.enabled=false в файл .properties, чтобы отключить всю безопасность для этого профиля. Я пытаюсь перейти на новую версию Spring Boot 2, где это свойство конфигурации удалено. Как добиться такого же поведения (без использования этого свойства) в Spring Boot 2.0.x?

Я уже читал Spring-Загрузка-Безопасность-2.0 и безопасность-изменения-в-пружине-загрузки-2-0-м4, и ничего об этом свойстве нет.

это свойство указано здесь как критическое изменение: github.com/spring-projects/spring-boot/wiki/…

KeatsPeeks 13.03.2018 15:33

@ KeatsPeeks Да, это правда. Вот почему я спрашиваю, как добиться такого же поведения в Spring Boot 2 (конечно, без этого свойства).

leonz 13.03.2018 15:36

@dur Да, это тоже правда. Вот почему я спрашиваю, как это сделать. Большинство ответов SO по отключению безопасности используют это свойство конфигурации. Все остальные используют аннотацию профиля, чтобы отключить компонент конфигурации для определенных профилей, но это не то поведение, которое я хочу, поскольку Spring Security требует входа в систему по умолчанию. Я хочу полностью отключить вход в систему для этих определенных профилей.

leonz 13.03.2018 16:02
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
13
3
25 278
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Вот как я решил проблему. Вот пример того, как моя конфигурация безопасности выглядела в Spring Boot 1.5.x. Безопасность была отключена свойством security.basic.enabled=false:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/upload/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests()
                .anyRequest().authenticated()
                .and().httpBasic();
    }
}

Поскольку security.basic.enabled был удален в Spring Boot 2 (но все еще зарезервирован как имя свойства), я в конечном итоге использовал security.enabled в качестве настраиваемого свойства. Вот пример того, как моя конфигурация выглядит в Spring Boot 2:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${security.enabled:true}")
    private boolean securityEnabled;

    @Override
    public void configure(WebSecurity web) throws Exception {
        if (securityEnabled)
            web.ignoring().antMatchers("/upload/**");
        else
            web.ignoring().antMatchers("/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        if (securityEnabled)
            http.csrf().disable().authorizeRequests()
                    .anyRequest().authenticated()
                    .and().httpBasic();
    }
}

Думаю наиболее полный ответ imo .... Для security.ignored = "* .js". что, если вы хотите игнорировать некоторые статические ресурсы, мы все еще используем web.ignore ()? или совсем другое ...

Eric Huang 11.09.2018 07:14

Вы можете добавить @ConditionalOnProperty(prefix = "spring", name = "security.enabled") в класс SecurityConfig, чтобы избежать if-else внутри configure()

Muzammil 02.10.2019 17:40
Ответ принят как подходящий

Вы должны добавить настраиваемую конфигурацию Spring Security, см. Справочное руководство по Spring Boot:

28.1 MVC Security

The default security configuration is implemented in SecurityAutoConfiguration and UserDetailsServiceAutoConfiguration. SecurityAutoConfiguration imports SpringBootWebSecurityConfiguration for web security and UserDetailsServiceAutoConfiguration configures authentication, which is also relevant in non-web applications. To switch off the default web application security configuration completely, you can add a bean of type WebSecurityConfigurerAdapter (doing so does not disable the UserDetailsService configuration or Actuator’s security).

Например:

@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web
           .ignoring()
               .antMatchers("/**");
    }
}

Чтобы использовать конфигурацию только для профиля, добавьте в класс @Profile. Если вы хотите включить его по свойству, добавьте в класс ConditionalOnProperty.

Обратите внимание, что если у вас есть несколько не исключающих друг друга конфигураций безопасности, вам также следует определить @Order. Например, если ваша основная конфигурация безопасности использует профиль по умолчанию (в нем не указан @Profile) и вы добавляете профиль разработчика в другую конфигурацию, тогда, когда вы работаете с активным профилем разработчика, Spring должен будет решить, какая конфигурация имеет приоритет.

The Gilbert Arenas Dagger 27.07.2018 19:09

На самом деле для определенных конфигураций на этот вопрос есть несколько ответов; в моем случае я играл с Spring Boot 2 с Spring Security и JWT. Чтобы защитить мои конечные точки REST, мне нужно создать токены и т. д. После того, как я написал свой код и попытался протестировать свои конечные точки, чтобы убедиться, что JWT работает нормально, я оказываюсь перед страницей входа по умолчанию. Я попытался изменить файл свойств, упомянутый выше, и, наконец, отключил его, добавив аннотацию @SpringBootApplication(exclude = {SecurityAutoConfiguration.class} ) в свой класс приложения.

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
public class JwtWithSpringBootApplication {

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

Вы ответили не совсем на вопрос, потому что вы отключаете только конфигурацию Spring Boot по умолчанию, но не свою собственную настраиваемую конфигурацию.

dur 27.07.2018 19:00

Есть еще один вариант отключения безопасности в весенней загрузке 2.

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})

Добавьте это поверх основного класса

В весенней загрузке 2.1.4 пришлось это сделать

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, SecurityFilterAutoConfiguration.class})

Это вызвало у меня следующую ошибку времени выполнения: Параметр 0 метода inMemoryUserDetailsManager в org.springframework.boot.autoconfigure.security.servlet.User‌ DetailsServiceAutoCo‌ nfiguration требовал bean типа org.springframework.boot.autoconfigure.security. perties ', которые не удалось найти.

Brandon 21.05.2019 15:40

Брэндон, похоже, вам нужна защита?

Kalpesh Soni 22.05.2019 00:17

Весенняя загрузка 2.1.3

Для определенного профиля "dev"

Создайте новый класс конфигурации Spring

@Configuration
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
@Profile("dev")
public class WebSecurityConfigDisable  {

}

Это отключит пружинную безопасность.

Вы можете отключить автоконфигурацию пружинной защиты, исключив SecurityAutoConfiguration.class, а ManagementWebSecurityAutoConfiguration.class должен быть исключен при получении зависимости пружина-пыльник-привод.

@SpringBootApplication(
exclude = { SecurityAutoConfiguration.class,  
            ManagementWebSecurityAutoConfiguration.class })
public class MySpringBootApplication {

Затем вы можете условно настроить свой пользовательский WebSecurityConfigurerAdapter, используя профиль или параметр конфигурации примерно так

@Configuration
@ConditionalOnProperty(prefix = "security.custom", name = "enabled", havingValue = "true")
@EnableWebSecurity
public class CustomWebSecurityConfiguration extends WebSecurityConfigurerAdapter {

Другие вопросы по теме