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>
Voici la classe de mon test.
@RunWith(SpringRunner.class)
@SpringBootTest
public class PluralsightSpringcloudM2ConfigserverGitApplicationTests {
@Test
public void contextLoads() {
}
}
Cela n'a rien à voir avec l'autre question
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.
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 .
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'
.
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
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