Spring boot Security Wyłącz zabezpieczenia


92

Kiedy używam security.basic.enabled = false, aby wyłączyć zabezpieczenia w projekcie Spring Boot, który ma następujące zależności:

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

Widzę następujący wyjątek:

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: {}

Aby naprawić ten wyjątek, musiałem dodać właściwość - management.security.enabled = false . Rozumiem, że gdy aktywator znajduje się w ścieżce klas, zarówno security.basic.enabled = false, jak i management.security.enabled = false powinny być ustawione, aby wyłączyć zabezpieczenia.

Czy ktoś mógłby mnie poinformować, jeśli moje rozumienie jest błędne?


1
Po co Ci ochrona ścieżki klas, jeśli chcesz tylko wyłączyć wszystko? W każdym razie ślad stosu jest niekompletny, więc nie ma sposobu, aby dowiedzieć się, co uniemożliwiło uruchomienie aplikacji. Spodziewałbym się, że to się zacznie, ale punkty końcowe siłownika powinny pozostać bezpieczne, dopóki ich jawnie nie otworzysz.
Dave Syer

@DaveSyer Chciałbym tymczasowo wyłączyć zabezpieczenia, a także mój kod aplikacji kieruje pliki zabezpieczające do działania.
Stackee007

Nadal nie opublikowałeś wystarczająco dużo informacji, aby zobaczyć, dlaczego aplikacja się nie uruchamia. Początkiem byłby pełny ślad stosu.
Dave Syer,

2
@DaveSyer Jednym z powodów byłaby mikrousługa zarządzająca spring-sec-oauth2 ClientDetails. Będziesz mieć przechodni import zabezpieczeń wiosennych, ale może nie chcesz mieć podstawowego uwierzytelniania w swojej usłudze.
Dirk Lachowski

Odpowiedzi:


79

Wydaje się, że działa dobrze, tworząc plik application-dev.propertieszawierający:

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

Jeśli następnie uruchomisz aplikację Spring Boot z devprofilem, nie musisz się logować.


1
security.basic.enabled = false nie jest potrzebne, jeśli wyłączysz zabezpieczenia za pomocą management.security.enabled = false
hennr

Dodałem też, że security.ignored=/**pracowałem. stackoverflow.com/a/36280413/3291867
mojtab23

10
To jest teraz przestarzałe!
Eagle_Eye

6
W rzeczy samej. Zobacz spring.io/blog/2017/09/15/…, aby uzyskać więcej informacji na temat wycofania, które miało miejsce w Spring Boot 2
Wim Deblauwe

72

Jeśli w opakowaniu znajduje się siłownik ze sprężyną rozruchową, należy dodać następujące elementy

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

W przypadku starszego Spring-boot klasa została nazwana ManagementSecurityAutoConfiguration.

W nowszych wersjach zmieniło się to na

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

39

Jeśli potrzebujesz zabezpieczeń jako zależności, ale nie chcesz, aby Spring Boot konfigurował je za Ciebie, możesz użyć tego wykluczenia:

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

21

W przypadku użytkowników butów sprężynowych 2 musi to być

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

1
Co się stało z ManagementWebSecurityAutoConfiguration podczas wiosennego rozruchu 2.0
Viyaan Jhiingade

Być może nadal będziesz musiał skomentować swoją @EnableWebSecurityadnotację
Victor Petit

21

W przypadku rozruchu Spring Boot 2 następujące właściwości są nieaktualne w konfiguracji application.yml

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

Aby wyłączyć zabezpieczenia dla Sprint Boot 2 Basic + Actuator Security , można użyć następujących właściwości w pliku application.yml zamiast wykluczania na podstawie adnotacji (@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

Dla application.properties składnia byłaby podobna

spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration


5

Dodaj następującą klasę do swojego kodu

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

}

I wstawka application.properties add

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

5

Jeśli używasz @WebMvcTestadnotacji w swojej klasie testowej

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

nie pomaga.

Tutaj możesz wyłączyć zabezpieczenia

@WebMvcTest(secure = false)

4

Odpowiedzią jest zezwolenie na wszystkie żądania w WebSecurityConfigurerAdapter, jak poniżej.

możesz to zrobić w istniejącej klasie lub w nowej klasie.

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

Uwaga: jeśli istnieje już klasa GlobalMethodSecurityConfiguration, musisz ją wyłączyć.


Nie zadziałało. Ale ten zadziałał dla mnie stackoverflow.com/questions/23894010/ ...
Ravi MCA

Cześć ravi, zgodnie z twoim rozwiązaniem nie zaleca się wyłączania csrf w środowisku produkcyjnym jako „http.csrf.disable ()”. czy wystąpił problem z CSRF dla połączeń POST itp.?
U_R_Naveen UR_Naveen

3

Zezwól na dostęp do wszystkiego, używając antMatchers („/”)

     protected void configure(HttpSecurity http) throws Exception {
            System.out.println("configure");
                    http.csrf().disable();
                    http.authorizeRequests().antMatchers("/").permitAll();
        }

3

Ja po prostu dodaje się security.ignored=/**w application.properties, i że zrobił urok.


więc oznacza to, że automatyczny mechanizm bezpieczeństwa nadal działa, ale po prostu ignoruje wszystkie ścieżki. Nie
czułbym

2

Aby uniknąć bezpieczeństwa, możesz użyć adnotacji. Użyj tej adnotacji na górze klasy configure:

@EnableWebSecurity

Na przykład:

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

15
Dlaczego należy @EnableWebSecuritywyłączyć zabezpieczenia internetowe?
lilalinux,

2

Musisz dodać ten wpis do application.properties, aby ominąć domyślne zabezpieczenia Springboot

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

Wtedy nie będzie żadnego pola uwierzytelniania. otrws, poświadczenia to: - useri 99b962fa-1848-4201-ae67-580bdeae87e9 (hasło generowane losowo)

Note: my springBootVersion = '1.5.14.RELEASE'


bez tego security.basic.enabled = false management.security.enabled = false security.ignored = / ** nie wystarczy, czy to normalne?
Bilgehan

2

Możesz skonfigurować przełączanie zabezpieczeń sprężyn w projekcie, wykonując poniższe 2 kroki:

KROK 1: Dodaj @ConditionalOnPropertyadnotację na górze klasy SecurityConfig. Zobacz poniżej:

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

KROK 2: Dodaj następującą konfigurację do swojego pliku application.propertieslub application.yml.

application.properties

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

LUB

application.yml

security:
  ignored: /**

myproject:
  security:
    enabled: false

1

Jedyna rzecz, która działała dla mnie:

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

i

security.ignored=/**

Możliwe, że część dotycząca właściwości jest zbędna lub może być wykonana w kodzie, ale nie miała czasu na eksperymenty. W każdym razie jest to tymczasowe.


1

Najłatwiejszym sposobem na Spring Boot 2 bez zależności lub zmian w kodzie jest po prostu:

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration

1
To nie działa z Spring Boot v2.2.2.RELEASE
Pra_A

0

Dodaj poniższe wiersze do swojej głównej aplikacji.

Usuń org.activiti.spring.boot.SecurityAutoConfiguration.class, jeśli nie używasz activiti.

Podobnie, zdejmij ten dla siłownika, jeśli nie używasz siłownika ze sprężyną rozruchową.

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

0

Jak wspomniano wcześniej, wiele rozwiązań wyłączających zabezpieczenia poprzez komentowanie

@EnableWebSecurity

adnotacja i inne odbywa się za pośrednictwem właściwości w application.properties lub yml. Ale te właściwości są wyświetlane jako przestarzałe w najnowszej wersji rozruchu wiosennego.

Chciałbym więc podzielić się innym podejściem do konfiguracji domyślnej nazwy użytkownika i hasła w twoim application-dev.properties lub application-dev.yml i używaniu ich do logowania się do Swagger itp. W środowisku programistycznym.

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

Tak więc takie podejście zapewnia również pewien rodzaj bezpieczeństwa i możesz udostępniać te informacje swojemu zespołowi programistów. Możesz także skonfigurować role użytkowników, ale nie jest to wymagane na poziomie programowania.


-3

Dodałem poniżej ustawienia w application.yml i działało dobrze.

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

można to przekonwertować jak w security.route-paterns-to-be-skipped=/**/*przypadku application.properties


1
Ta właściwość w ogóle nie istnieje.
Drakes
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.