Spring Boot-Sicherheit Deaktivieren Sie die Sicherheit


92

Wenn ich security.basic.enabled = false verwende , um die Sicherheit in einem Spring Boot-Projekt zu deaktivieren, das die folgenden Abhängigkeiten aufweist:

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

Ich sehe die folgende Ausnahme:

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

Um diese Ausnahme zu beheben, musste ich die Eigenschaft - management.security.enabled = false hinzufügen . Mein Verständnis ist, dass, wenn sich der Aktor im Klassenpfad befindet, sowohl security.basic.enabled = false als auch management.security.enabled = false festgelegt werden sollten, um die Sicherheit zu deaktivieren.

Könnte jemand mich bitte wissen lassen, wenn mein Verständnis falsch ist?


1
Warum benötigen Sie Sicherheit für Ihren Klassenpfad, wenn Sie nur alles deaktivieren möchten? Wie auch immer, Ihre Stapelverfolgung ist unvollständig, sodass Sie nicht wissen können, was den Start der App verhindert hat. Ich würde erwarten, dass es startet, aber die Aktuatorendpunkte sollten sicher bleiben, bis Sie sie explizit öffnen.
Dave Syer

@ DaveSyer Ich möchte die Sicherheit vorübergehend deaktivieren und auch mein Anwendungscode verweist auf Sicherheitsgläser.
Stackee007

Sie haben immer noch nicht genügend Informationen veröffentlicht, um festzustellen, warum die App nicht gestartet wird. Eine vollständige Stapelverfolgung wäre ein Anfang.
Dave Syer

2
@ DaveSyer Ein Grund wäre ein Microservice, der spring-sec-oauth2 verwaltet ClientDetails. Sie haben einen transitiven Import von Spring-Security, möchten aber möglicherweise keine grundlegende Authentifizierung in Ihrem Dienst.
Dirk Lachowski

Antworten:


79

Was auch gut zu funktionieren scheint, ist das Erstellen einer Datei application-dev.properties, die Folgendes enthält:

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

Wenn Sie dann Ihre Spring Boot-App mit dem devProfil starten , müssen Sie sich nicht anmelden.


1
security.basic.enabled = false wird nicht benötigt, wenn Sie die Sicherheit mit management.security.enabled = false deaktivieren
hennr

Ich fügte hinzu, security.ignored=/**dann arbeitete. stackoverflow.com/a/36280413/3291867
mojtab23

10
Dies ist jetzt veraltet!
Eagle_Eye

6
Tatsächlich. Siehe spring.io/blog/2017/09/15/… für weitere Informationen über die Abwertung, die in Spring Boot 2
Wim Deblauwe

72

Wenn Sie einen Spring-Boot-Aktuator in Ihrem Paket haben, sollten Sie Folgendes hinzufügen

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

Mit älterem Spring-Boot wurde die Klasse aufgerufen ManagementSecurityAutoConfiguration.

In neueren Versionen hat sich dies geändert

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

39

Wenn Sie Sicherheit als Abhängigkeit benötigen, Spring Boot diese jedoch nicht für Sie konfigurieren soll, können Sie diesen Ausschluss verwenden:

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

21

Für den Spring Boot 2 Benutzer muss es sein

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

1
Was ist mit ManagementWebSecurityAutoConfiguration im Frühjahr Boot 2.0
passiert

Möglicherweise müssen Sie Ihre @EnableWebSecurityAnmerkung noch kommentieren
Victor Petit

20

Für Spring Boot 2 sind die folgenden Eigenschaften in der Konfiguration von application.yml veraltet

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

Um die Sicherheit für Sprint Boot 2 Basic + Actuator Security zu deaktivieren, können die folgenden Eigenschaften in der Datei application.yml anstelle des auf Anmerkungen basierenden Ausschlusses verwendet werden (@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

Für application.properties wäre die Syntax wie folgt

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


5

Fügen Sie Ihrem Code die folgende Klasse hinzu

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

}

Und insie von application.properties hinzufügen

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

5

Wenn Sie @WebMvcTestin Ihrer Testklasse Anmerkungen verwenden

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

hilft dir nicht

Hier können Sie die Sicherheit deaktivieren

@WebMvcTest(secure = false)

4

Die Antwort besteht darin, alle Anforderungen in WebSecurityConfigurerAdapter wie folgt zuzulassen.

Sie können dies in einer vorhandenen Klasse oder in einer neuen Klasse tun.

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

Bitte beachten Sie: Wenn eine GlobalMethodSecurityConfiguration-Klasse vorhanden ist, müssen Sie diese deaktivieren.


Nicht funktioniert. Aber dieser hat für mich funktioniert stackoverflow.com/questions/23894010/…
Ravi MCA

Hallo Ravi, gemäß Ihrer Lösung wird nicht empfohlen, csrf in der Produktion als "http.csrf.disable ()" zu deaktivieren. Haben Sie ein CSRF-Problem für POST-Anrufe usw. erhalten?
U_R_Naveen UR_Naveen

3

Erlaube den Zugriff auf alles mit antMatchers ("/")

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

3

Ich habe einfach hinzugefügt security.ignored=/**in der application.properties, und das hat den Charme.


Das bedeutet, dass der automatische Sicherheitsmechanismus immer noch vorhanden ist, aber nur alle Pfade ignoriert. Ich würde es nicht bequem finden, die Dinge zu behalten, die nicht benötigt werden
Paramvir Singh Karwal

2

Um Sicherheit zu vermeiden, können Sie Anmerkungen verwenden. Verwenden Sie diese Anmerkung zusätzlich zur Konfigurationsklasse:

@EnableWebSecurity

Zum Beispiel:

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

15
Warum sollte @EnableWebSecurityWeb Security deaktiviert werden?
Lilalinux

2

Sie müssen diesen Eintrag zu application.properties hinzufügen , um die Springboot-Standardsicherheit zu umgehen

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

Dann gibt es keine Authentifizierungsbox. otrws, Anmeldeinformationen sind: - userund 99b962fa-1848-4201-ae67-580bdeae87e9 (Passwort zufällig generiert)

Note: my springBootVersion = '1.5.14.RELEASE'


ohne dies ist security.basic.enabled = false management.security.enabled = false security.ignored = / ** ist nicht genug, ist es normal?
Bilgehan

2

Sie können das Umschalten der Federsicherheit in Ihrem Projekt konfigurieren, indem Sie die folgenden 2 Schritte ausführen:

SCHRITT 1: Fügen Sie @ConditionalOnPropertyIhrer SecurityConfig-Klasse eine Anmerkung hinzu. Siehe unten:

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

SCHRITT 2: Fügen Sie Ihrer application.propertiesoder Ihrer application.ymlDatei die folgende Konfiguration hinzu .

application.properties

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

ODER

application.yml

security:
  ignored: /**

myproject:
  security:
    enabled: false

1

Das einzige was bei mir funktioniert hat:

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

und

security.ignored=/**

Könnte sein, dass der Eigenschaftenteil redundant ist oder im Code ausgeführt werden kann, aber keine Zeit zum Experimentieren hatte. Sowieso ist vorübergehend.


1

Der einfachste Weg für Spring Boot 2 ohne Abhängigkeiten oder Codeänderungen ist nur:

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

1
Dies funktioniert nicht mit Spring Boot v2.2.2.RELEASE
Pra_A

0

Fügen Sie die folgenden Zeilen zu Ihrer Haupt-App hinzu.

Entfernen Sie org.activiti.spring.boot.SecurityAutoConfiguration.class, wenn Sie activiti nicht verwenden.

Entfernen Sie in ähnlicher Weise die für den Aktuator, wenn Sie keinen Feder-Boot-Aktuator verwenden.

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

0

Wie bereits erwähnt, werden mehrere Lösungen erwähnt, um die Sicherheit durch Kommentieren von zu deaktivieren

@EnableWebSecurity

Annotation und andere erfolgt über Eigenschaften in application.properties oder yml. Diese Eigenschaften werden jedoch in der neuesten Spring Boot-Version als veraltet angezeigt.

Daher möchte ich einen anderen Ansatz zum Konfigurieren des Standardbenutzernamens und -kennworts in Ihrer application-dev.properties oder application-dev.yml teilen und diese verwenden, um sich bei swagger und etc in der Entwicklungsumgebung anzumelden .

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

Dieser Ansatz bietet Ihnen also auch eine gewisse Sicherheit und Sie können diese Informationen mit Ihrem Entwicklungsteam teilen. Sie können auch Benutzerrollen konfigurieren, dies ist jedoch in der Entwicklungsstufe nicht erforderlich.


-3

Ich habe die folgenden Einstellungen in application.yml hinzugefügt und gut funktioniert.

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

Dies kann wie security.route-paterns-to-be-skipped=/**/*für application.properties konvertiert werden


1
Diese Eigenschaft existiert überhaupt nicht.
Drakes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.