Spring boot Security Вимкніть безпеку


93

Коли я використовую 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 повинні бути встановлені для відключення захисту.

Чи може хтось, будь ласка, повідомити мене, якщо я не розумію?


1
Навіщо потрібна безпека на шляху до вашого класу, якщо ви просто хочете відключити все? У будь-якому випадку, ваш стек неповний, тому немає можливості дізнатися, що заважало програмі запускатися. Я би очікував, що він почнеться, але кінцеві точки виконавчого механізму повинні залишатися надійними, поки ви явно їх не відкриєте.
Дейв Саєр,

@DaveSyer Я хотів би тимчасово вимкнути безпеку, а також мій код програми посилає банки безпеки на роботу.
Stackee007

Ви все ще не опублікували достатньо інформації, щоб зрозуміти, чому програма не запускається. Повна траса стека була б початком.
Dave Syer

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

11
Це вже застаріло!
Eagle_Eye

6
Справді. Дивіться spring.io/blog/2017/09/15/… для отримання додаткової інформації про припинення розвитку, яке сталося у Spring Boot 2
Вім Деблау

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 
    })

23

Для 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

21

Для весняного завантаження 2 користувачів це повинно бути

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

1
Що сталося з ManagementWebSecurityAutoConfiguration у весняному завантаженні 2.0
Viyaan Jhiingade

Можливо, вам все одно доведеться коментувати свою @EnableWebSecurityанотацію
Віктор Петі,


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();
    }

}

І ще додано додаток

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, його потрібно вимкнути.


Не працював. Але ця спрацювала для мене stackoverflow.com/questions/23894010/…
Ravi MCA

Привіт, ravi, згідно з вашим рішенням, не рекомендується вимикати 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, і що зробило чарівність.


це означає, що автоматичний механізм безпеки все ще діє, але просто ігнорує всі шляхи. Мені було б комфортно тримати речі, які не є обов’язковими
Парамвір Сінгх Карвал,

2

Щоб уникнути безпеки, ви можете використовувати анотації. Використовуйте цю анотацію поверх класу налаштування:

@EnableWebSecurity

Наприклад:

@EnableWebSecurity
@Configuration
public class AuthFilter{
   // configured method 
}

15
Чому слід @EnableWebSecurityвідключити веб-безпеку?
lilalinux

2

Вам потрібно додати цей запис до application.properties, щоб обійти Springboot Default Security

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

Тоді вікна автентифікації не буде. otrws, облікові дані: - userі 99b962fa-1848-4201-ae67-580bdeae87e9 (пароль випадково сформований)

Note: my springBootVersion = '1.5.14.RELEASE'


без цього безпеки.basic.enabled = помилкове управління.security.enabled = хибне security.ignored = / ** недостатньо, це нормально?
Білгехан,

2

Ви можете налаштувати перемикання захисту пружин у своєму проекті, виконавши нижче 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файлу.

застосування. властивості

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

АБО

застосування.имм

security:
  ignored: /**

myproject:
  security:
    enabled: false

Чи можна використовувати лише одну властивість?
wakeeer

@wakedeer Ваш коментар здається загадковим, не могли б Ви розказати?
Сахіл Чхабра

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

2
Це не працює з Spring Boot v2.2.2.ВИПУСК
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 })

0

Як раніше згадувалося декілька рішень для вимкнення безпеки шляхом коментування

@EnableWebSecurity

анотація та інше через властивості в application.properties або yml. Але ці властивості відображаються як застарілі в останній весняній завантажувальній версії.

Отже, я хотів би поділитися іншим підходом для налаштування імені користувача та пароля за замовчуванням у вашому 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
Ця властивість взагалі не існує.
Дрейк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.