web-dev-qa-db-fra.com

La propriété 'security.basic.enabled' est obsolète: la configuration automatique de la sécurité n'est plus personnalisable

Je travaille sur un projet Spring Cloud utilisant le spring-boot-starter-parent version 2.0.1.RELEASE .

Je reçois en bas avertissement, ressembler

La propriété 'security.basic.enabled' est obsolète: la configuration automatique de la sécurité n'est plus personnalisable. Indiquez plutôt votre propre bean WebSecurityConfigurer.

security: basic: enabled: false est désactivé dans la dernière version de Spring Security.

Pourriez-vous me guider, que devrais-je utiliser à la place?

application.yml

---
server:
  port: 8888

security:
  basic:
    enabled: false

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/rseroter/pluralsight-spring-cloudconfig-wa-tolls

          search-paths:
          - 'station*'
          repos:
            perf:
              pattern:
                - '*/perf'
              uri: https://github.com/rseroter/pluralsight-spring-cloudconfig-wa-tolls-perf
              search-paths:
               - 'station*'

pom.xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <Java.version>1.8</Java.version>
        <spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</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-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

enter image description here

Voici la classe de mon test.

@RunWith(SpringRunner.class)
@SpringBootTest
public class PluralsightSpringcloudM2ConfigserverGitApplicationTests {

    @Test
    public void contextLoads() {
    }

}

et enter image description here

Cela n'a rien à voir avec l'autre question

17
Jeff Cook

De cette façon, j'ai pu résoudre ce problème. Pas sûr cependant. Je viens de corriger application.yml

---
server:
  port: 8888


spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/rseroter/pluralsight-spring-cloudconfig-wa-tolls

          search-paths:
          - 'station*'
          repos:
            perf:
              pattern:
                - '*/perf'
              uri: https://github.com/rseroter/pluralsight-spring-cloudconfig-wa-tolls-perf
              search-paths:
               - 'station*'
  security:
    user:
      name: test
      password: test

Lorsque j'accède à l'URL: http: // localhost: 8888/s1rates/default, il m'a demandé le nom d'utilisateur et mot de passe et je reçois le résultat ci-dessous.

enter image description here

2
Jeff Cook

Spring Boot 2.0 a modifié sa configuration automatique (y compris certaines propriétés) et a maintenant un comportement unique qui disparaît dès que vous ajoutez votre propre WebSecurityConfigurerAdapter. La configuration par défaut ressemble à

protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()
            .anyRequest().authenticated()
            .and()
        .formLogin()
            .and()
        .httpBasic();
}

Un utilisateur unique avec un mot de passe généré est configuré par défaut. Pour personnaliser cet utilisateur, utilisez les propriétés sous spring.security.user.

spring.security.user.name=user # Default user name.
spring.security.user.password= # Password for the default user name.
spring.security.user.roles= # Granted roles for the default user name.

Les propriétés suivantes ont été supprimées à partir de Spring Boot 2:

security.basic.authorize-mode
security.basic.enabled
security.basic.path
security.basic.realm
security.enable-csrf
security.headers.cache
security.headers.content-security-policy
security.headers.content-security-policy-mode
security.headers.content-type
security.headers.frame
security.headers.hsts
security.headers.xss
security.ignored
security.require-ssl
security.sessions

Les remplacements (s'ils existent) peuvent être trouvés ici: Annexe A. Propriétés d'application communes

Pour être clair: si vous créez un WebSecurityConfigurerAdapter personnalisé, la configuration de sécurité par défaut sera remplacée par votre configuration personnalisée:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // For example: Use only Http Basic and not form login.
        http
            .authorizeRequests()
                .anyRequest().authenticated()
                .and()
            .httpBasic();
    }
}

Pour plus d'informations, visitez Spring 2.0 Migration Guide .

17
sn42

En effet, lorsque vous écrivez security.basic.enabled = false _ vous dites essentiellement à l’application que la sécurité me importe peu et vous autorisez toute la demande. Après le démarrage du printemps 2.0, vous ne pouvez pas écrire cette configuration pour rendre l’application non sécurisée. Vous devez écrire du code pour le faire. Ou vous pouvez simplement copier ce qui suit.

package com.LockheedMartin.F22Simulator;
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;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll();
    }
}

En passant, vous devriez enlever security.basic.enabled = false de votre application.properties, comme spring 2.*.* ne comprend plus cette propriété et si vous avez configuré Intellij correctement, vous devriez voir un avertissement disant 'unsupported property'.

6
sapy

Si vous utilisez la sécurité réactive de Spring, nous devons faire quelque chose comme ceci,

@Bean
  public SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) {
    http.authorizeExchange().anyExchange().permitAll();
    return http.build();
  }

Il existe également un autre article sur stackoverflow, Spring Boot 2.0 désactive la sécurité par défaut

4

Je voudrais essayer ce qui suit sur votre classe de test:

@SpringBootTest (properties = "spring.autoconfigure.exclude = org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration")

Cela désactive la configuration automatique de spring-security dans le contexte de votre classe de test.

EDIT: si cela n’est pas limité au contexte des classes de test, on pourrait appliquer la même chose à:

@SpringBootApplication (exclude = "org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration")

ou autrement, dans votre application.yaml, vous pouvez faire:

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

3
guido