Spring Boot Security Désactiver la sécurité

92

Lorsque j'utilise security.basic.enabled = false pour désactiver la sécurité sur un projet Spring Boot qui a les dépendances suivantes:

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

Je vois l' exception suivante :

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

Afin de corriger cette exception, j'ai dû ajouter la propriété - management.security.enabled = false . Je crois comprendre que lorsque l'actionneur est dans le chemin de classe, security.basic.enabled = false et management.security.enabled = false doivent être définis pour désactiver la sécurité.

Quelqu'un pourrait-il s'il vous plaît me faire savoir si ma compréhension est fausse?

user3600073
la source
1
Pourquoi avez-vous besoin de sécurité sur votre chemin de classe si vous souhaitez simplement tout désactiver? Quoi qu'il en soit, votre trace de pile est incomplète, il n'y a donc aucun moyen de savoir ce qui empêchait l'application de démarrer. Je m'attendrais à ce que cela démarre, mais les points d'extrémité de l'actionneur devraient rester sécurisés jusqu'à ce que vous les ouvriez explicitement.
Dave Syer
@DaveSyer Je voudrais désactiver temporairement la sécurité et mon code d'application fait en sorte que les jars de sécurité fonctionnent.
Stackee007
Vous n'avez toujours pas publié suffisamment d'informations pour voir pourquoi l'application ne démarre pas. Une trace de pile complète serait un début.
Dave Syer
2
@DaveSyer Une des raisons serait un microservice gérant spring-sec-oauth2 ClientDetails. Vous aurez une importation transitive de spring-security, mais peut-être que vous ne voulez pas d'auth de base dans votre service.
Dirk Lachowski

Réponses:

79

Ce qui semble également fonctionner correctement, c'est la création d'un fichier application-dev.propertiescontenant:

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

Si vous démarrez ensuite votre application Spring Boot avec le devprofil, vous n'avez pas besoin de vous connecter.

Wim Deblauwe
la source
1
security.basic.enabled = false n'est pas nécessaire si vous désactivez la sécurité avec management.security.enabled = false
hennr
J'ai également ajouté security.ignored=/**puis travaillé. stackoverflow.com/a/36280413/3291867
mojtab23
10
Ceci est désormais obsolète!
Eagle_Eye
6
En effet. Voir spring.io/blog/2017/09/15/… pour plus d'informations sur la dépréciation qui s'est produite dans Spring Boot 2
Wim Deblauwe
72

Si vous avez un actionneur à ressort dans votre emballage, vous devez ajouter ce qui suit

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

Avec l'ancien Spring-boot, la classe était appelée ManagementSecurityAutoConfiguration.

Dans les versions plus récentes, cela est devenu

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

Si vous avez besoin de la sécurité en tant que dépendance mais que vous ne voulez pas que Spring Boot la configure pour vous, vous pouvez utiliser cette exclusion:

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

Pour les utilisateurs de Spring Boot 2, il doit être

@EnableAutoConfiguration(exclude = {
    org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})
gkatzioura
la source
1
Qu'est-il arrivé à ManagementWebSecurityAutoConfiguration dans Spring Boot 2.0
Viyaan Jhiingade
Vous devrez peut-être encore commenter votre @EnableWebSecurityannotation
Victor Petit
21

Pour Spring Boot 2, les propriétés suivantes sont obsolètes dans la configuration application.yml

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

Pour désactiver la sécurité de Sprint Boot 2 Basic + Actuator Security, les propriétés suivantes peuvent être utilisées dans le fichier application.yml au lieu de l'exclusion basée sur les annotations (@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

Pour application.properties, la syntaxe serait comme

spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
karans123
la source
5

Ajoutez la classe suivante dans votre code

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

}

Et à l'intérieur de l'application.properties ajouter

security.ignored=/**
security.basic.enabled=false
management.security.enabled=false
vaquar khan
la source
5

Si vous utilisez une @WebMvcTestannotation dans votre classe de test

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

ne vous aide pas.

Vous pouvez désactiver la sécurité ici

@WebMvcTest(secure = false)
Mykola Shorobura
la source
4

La réponse est d'autoriser toutes les demandes dans WebSecurityConfigurerAdapter comme ci-dessous.

vous pouvez le faire dans une classe existante ou dans une nouvelle classe.

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

Remarque: s'il existe une classe GlobalMethodSecurityConfiguration, vous devez la désactiver.

U_R_Naveen UR_Naveen
la source
Pas travaillé. Mais celui-ci a fonctionné pour moi stackoverflow.com/questions/23894010/…
Ravi MCA
Salut ravi, selon votre solution, il n'est pas recommandé de désactiver csrf en production comme "http.csrf.disable ()". avez-vous eu un problème CSRF pour les appels POST, etc.?
U_R_Naveen UR_Naveen
3

Autoriser l'accès à tout à l'aide de antMatchers ("/")

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

J'ai simplement ajouté security.ignored=/** dans le application.properties, et cela a fait le charme.

codereal
la source
Cela signifie que le mécanisme de sécurité automatique est toujours en place mais ignore simplement tous les chemins. Je ne serais pas à l'aise de garder les choses qui ne sont pas nécessaires
Paramvir Singh Karwal
2

Afin d'éviter la sécurité, vous pouvez utiliser des annotations. Utilisez cette annotation en plus de la classe configure:

@EnableWebSecurity

Par exemple:

@EnableWebSecurity
@Configuration
public class AuthFilter{
   // configured method 
}
Ramesh Babu
la source
15
Pourquoi @EnableWebSecuritydésactiver la sécurité Web?
lilalinux du
2

Vous devez ajouter cette entrée à application.properties pour contourner la sécurité par défaut de Springboot

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

Ensuite, il n'y aura pas de boîte d'authentification. otrws, les informations d'identification sont: - useret 99b962fa-1848-4201-ae67-580bdeae87e9 (mot de passe généré aléatoirement)

Note: my springBootVersion = '1.5.14.RELEASE'

Titus
la source
sans cela, security.basic.enabled = false management.security.enabled = false security.ignored = / ** n'est pas suffisant est-ce normal?
Bilgehan
2

Vous pouvez configurer pour activer la sécurité des ressorts dans votre projet en suivant les 2 étapes ci-dessous:

ÉTAPE 1: ajoutez une @ConditionalOnPropertyannotation au-dessus de votre classe SecurityConfig. Référez-vous ci-dessous:

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

ÉTAPE 2: Ajoutez la configuration suivante à votre fichier application.propertiesou application.yml.

application.properties

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

OU

application.yml

security:
  ignored: /**

myproject:
  security:
    enabled: false
Sahil Chhabra
la source
1

La seule chose qui a fonctionné pour moi:

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

et

security.ignored=/**

Peut-être que la partie des propriétés est redondante ou peut être effectuée dans le code, mais n'a pas eu le temps d'expérimenter. Quoi qu'il en soit, c'est temporaire.

alexcorghencea
la source
1

Le moyen le plus simple pour Spring Boot 2 sans dépendances ni changements de code est simplement:

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
Przemek Nowak
la source
1
Cela ne fonctionne pas avec Spring Boot v2.2.2.RELEASE
Pra_A
0

Ajoutez les lignes ci-dessous à votre application principale.

Supprimez org.activiti.spring.boot.SecurityAutoConfiguration.class si vous n'utilisez pas activiti.

De même, retirez celui de l'actionneur si vous n'utilisez pas l'actionneur à ressort.

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

Comme précédemment, plusieurs solutions mentionnées pour désactiver la sécurité en commentant

@EnableWebSecurity

l'annotation et autres se font par le biais de propriétés dans application.properties ou yml. Mais ces propriétés apparaissent comme obsolètes dans la dernière version de Spring Boot.

Donc, je voudrais partager une autre approche pour configurer le nom d'utilisateur et le mot de passe par défaut dans votre application-dev.properties ou application-dev.yml et les utiliser pour vous connecter à swagger et etc. dans l'environnement de développement.

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

Ainsi, cette approche vous fournira également une sorte de sécurité et vous pourrez partager ces informations avec votre équipe de développement. Vous pouvez également configurer les rôles d'utilisateur, mais ce n'est pas obligatoire au niveau de développement.

Nallamachu
la source
-3

J'ai ajouté les paramètres ci-dessous dans application.yml et j'ai bien fonctionné.

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

cela peut être converti comme security.route-paterns-to-be-skipped=/**/*pour application.properties

Prasath Rajan
la source
1
Cette propriété n'existe pas du tout.
Drakes