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?

user3600073
źródło
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ć.

Wim Deblauwe
źródło
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}
        )
Varesh
źródło
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 
    })
gyoder
źródło
21

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

@EnableAutoConfiguration(exclude = {
    org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})
gkatzioura
źródło
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
karans123
źródło
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
vaquar khan
źródło
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)
Mykola Shorobura
źródło
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ć.

U_R_Naveen UR_Naveen
źródło
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();
        }
Sarat Chandra
źródło
3

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

dorsza
źródło
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 
}
Ramesh Babu
źródło
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'

Titus
źródło
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
Sahil Chhabra
źródło
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.

alexcorghencea
źródło
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
Przemek Nowak
źródło
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 })
CodeShadow
źródło
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.

Nallamachu
źródło
-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

Prasath Rajan
źródło
1
Ta właściwość w ogóle nie istnieje.
Drakes