Spring boot Security Отключить безопасность

92

Когда я использую security.basic.enabled = false, чтобы отключить безопасность в проекте Spring Boot, который имеет следующие зависимости:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

Я вижу следующее исключение:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.ManagementSecurityAutoConfiguration$ManagementWebSecurityConfigurerAdapter': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.setObjectPostProcessor(org.springframework.security.config.annotation.ObjectPostProcessor); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.security.config.annotation.ObjectPostProcessor] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

Чтобы исправить это исключение, мне пришлось добавить свойство - management.security.enabled = false . Насколько я понимаю, когда исполнительный механизм находится в пути к классам, для отключения безопасности должны быть установлены параметры security.basic.enabled = false и management.security.enabled = false .

Может ли кто-нибудь сообщить мне, если я неправильно понимаю?

user3600073
источник
1
Зачем вам нужна безопасность на пути к классам, если вы просто хотите все отключить? В любом случае, трассировка стека неполная, поэтому невозможно узнать, что мешало запуску приложения. Я ожидал, что это начнется, но конечные точки привода должны оставаться в безопасности, пока вы явно не откроете их.
Дэйв Сайер
@DaveSyer Я хотел бы временно отключить безопасность, а также код моего приложения указывает на работу безопасные банки.
Stackee007
Вы все еще не опубликовали достаточно информации, чтобы понять, почему приложение не запускается. Начнем с полной трассировки стека.
Дэйв Сайер,
2
@DaveSyer Одна из причин - это микросервис, управляющий spring-sec-oauth2 ClientDetails. У вас будет транзитивный импорт spring -security, но, возможно, вам не понадобится базовая аутентификация в вашем сервисе.
Дирк Лачовски

Ответы:

79

Что также, кажется, работает нормально, так это создание файла application-dev.properties, содержащего:

security.basic.enabled=false
management.security.enabled=false

Если вы затем запустите приложение Spring Boot с devпрофилем, вам не нужно будет входить в систему.

Вим Деблаув
источник
1
security.basic.enabled = false не требуется, если вы отключаете безопасность с помощью management.security.enabled = false
hennr
Я тоже добавил, security.ignored=/**потом работал. stackoverflow.com/a/36280413/3291867
mojtab23
10
Теперь это устарело!
Eagle_Eye
6
На самом деле. См. Spring.io/blog/2017/09/15/… для получения дополнительной информации об устаревании, которое произошло в Spring Boot 2
Wim Deblauwe
72

Если у вас есть пружинный привод в комплекте, вы должны добавить следующие

@EnableAutoConfiguration(exclude = {
        org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration.class})

В более старых версиях Spring-boot класс назывался ManagementSecurityAutoConfiguration.

В более новых версиях это изменилось на

@SpringBootApplication(exclude = {
        org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class}
        )
Вареш
источник
39

Если вам нужна безопасность как зависимость, но вы не хотите, чтобы Spring Boot настраивал ее за вас, вы можете использовать это исключение:

    @EnableAutoConfiguration(exclude = { 
        org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class 
    })
гёдер
источник
21

Для пользователей Spring boot 2 это должно быть

@EnableAutoConfiguration(exclude = {
    org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})
Gkatzioura
источник
1
Что случилось с ManagementWebSecurityAutoConfiguration в весенней загрузке 2.0
Вияан Джингад
Возможно, вам все еще придется прокомментировать свою @EnableWebSecurityаннотацию
Виктор Пети
21

Для Spring Boot 2 следующие свойства устарели в конфигурации application.yml

  security.basic.enabled: false
  management.security.enabled: false

Чтобы отключить безопасность для Sprint Boot 2 Basic + Actuator Security, в файле application.yml можно использовать следующие свойства вместо исключения на основе аннотаций (@EnableAutoConfiguration (exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class}))

  spring:
    autoconfigure:
      exclude[0]: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
      exclude[1]: org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration

Для application.properties синтаксис будет как

spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
караны123
источник
11

Шаг 1. Прокомментируйте аннотацию @EnableWebSecurity в конфигурации безопасности

//@EnableWebSecurity

Шаг 2: Добавьте это в свой файл application.properties .

security.ignored=/**
spring.security.enabled=false
management.security.enabled=false
security.basic.enabled=false

Более подробную информацию смотрите здесь: http://codelocation.com/how-to-turn-on-and-off-spring-security-in-spring-boot-application/

VK321
источник
5

Добавьте следующий класс в свой код

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**
 * @author vaquar khan
 */
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests().antMatchers("/**").permitAll().anyRequest().authenticated().and().csrf().disable();
    }

}

И insie из application.properties добавить

security.ignored=/**
security.basic.enabled=false
management.security.enabled=false
Вакуар Хан
источник
5

Если вы используете @WebMvcTestаннотацию в своем тестовом классе

@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
@TestPropertySource(properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration"})

тебе не помогает.

Вы можете отключить безопасность здесь

@WebMvcTest(secure = false)
Николай Шоробура
источник
4

Ответ - разрешить все запросы в WebSecurityConfigurerAdapter, как показано ниже.

вы можете сделать это в существующем классе или в новом классе.

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll();
    }

Обратите внимание: если существует класс GlobalMethodSecurityConfiguration, вы должны отключить его.

U_R_Naveen UR_Naveen
источник
Не сработало. Но этот сработал для меня stackoverflow.com/questions/23894010/…
Рави MCA
Привет, рави, согласно вашему решению, не рекомендуется отключать csrf в производстве как «http.csrf.disable ()». у вас возникла проблема с CSRF для вызовов POST и т. д.?
U_R_Naveen UR_Naveen
3

Разрешить доступ ко всему с помощью antMatchers ("/")

     protected void configure(HttpSecurity http) throws Exception {
            System.out.println("configure");
                    http.csrf().disable();
                    http.authorizeRequests().antMatchers("/").permitAll();
        }
Сарат Чандра
источник
3

Я просто добавил security.ignored=/**в application.properties, и это сделало очарование.

Codereal
источник
это означает, что автоматический механизм безопасности все еще действует, но игнорирует все пути. Мне было бы неудобно хранить то, что не требуется,
Парамвир Сингх Карвал
2

В целях безопасности вы можете использовать аннотации. Используйте эту аннотацию поверх класса configure:

@EnableWebSecurity

Например:

@EnableWebSecurity
@Configuration
public class AuthFilter{
   // configured method 
}
Рамеш Бабу
источник
15
Зачем @EnableWebSecurityотключать веб-безопасность?
lilalinux
2

Вам необходимо добавить эту запись в application.properties, чтобы обойти безопасность Springboot по умолчанию

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration

Тогда ящика аутентификации не будет. otrws, учетные данные: - userи 99b962fa-1848-4201-ae67-580bdeae87e9 (пароль генерируется случайным образом)

Note: my springBootVersion = '1.5.14.RELEASE'

Тит
источник
без этого security.basic.enabled = false management.security.enabled = false security.ignored = / ** недостаточно, это нормально?
Bilgehan
2

Вы можете настроить переключение Spring Security в своем проекте, выполнив следующие 2 шага:

ШАГ 1: Добавьте @ConditionalOnPropertyаннотацию поверх вашего класса SecurityConfig. См. Ниже:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity (prePostEnabled = true)
@ConditionalOnProperty (name = "myproject.security.enabled", havingValue = "true", matchIfMissing = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
   // your security config
}

ШАГ 2: Добавьте следующую конфигурацию в ваш application.propertiesили application.ymlфайл.

application.properties

security.ignored=/**
myproject.security.enabled=false

ИЛИ

application.yml

security:
  ignored: /**

myproject:
  security:
    enabled: false
Сахил Чабра
источник
1

Единственное, что у меня сработало:

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

а также

security.ignored=/**

Возможно, часть свойств избыточна или может быть реализована в коде, но не было времени на эксперименты. В любом случае временно.

алексоргенцея
источник
1

Самый простой способ для Spring Boot 2 без зависимостей или изменений кода:

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
Пшемек Новак
источник
1
Это не работает с Spring Boot v2.2.2.RELEASE
Pra_A
0

Добавьте приведенные ниже строки в свое основное приложение.

Удалите org.activiti.spring.boot.SecurityAutoConfiguration.class, если вы не используете activiti.

Точно так же снимите один для привода, если вы не используете пружинный привод.

@EnableAutoConfiguration(exclude = {
org.activiti.spring.boot.SecurityAutoConfiguration.class,
org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration.class,
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class })
CodeShadow
источник
0

Как упоминалось ранее, несколько решений для отключения безопасности путем комментирования

@EnableWebSecurity

аннотация и прочее - через свойства в application.properties или yml. Но эти свойства отображаются как устаревшие в последней версии загрузки Spring.

Итак, я хотел бы поделиться другим подходом к настройке имени пользователя и пароля по умолчанию в вашем application-dev.properties или application-dev.yml и использовать их для входа в swagger и т.д. в среде разработки.

spring.security.user.name=admin
spring.security.user.password=admin

Таким образом, этот подход также обеспечит вам некоторую безопасность, и вы можете поделиться этой информацией со своей командой разработчиков. Вы также можете настроить роли пользователей, но это не требуется на уровне разработки.

Налламачу
источник
-3

Я добавил ниже настройки в application.yml и работал нормально.

security:
    route-patterns-to-be-skipped:
      - /**/*

это может быть преобразовано как security.route-paterns-to-be-skipped=/**/*для application.properties

Прасат Раджан
источник
1
Это свойство вообще не существует.
Дрейки