Dans Spring Boot 1.5.x, la sécurité a été configurée et dans certains profils (par exemple, local), j'ai ajouté une ligne security.basic.enabled=false
au fichier .properties pour désactiver toute la sécurité de ce profil. J'essaie de migrer vers le nouveau Spring Boot 2, où cette propriété de configuration est supprimée. Comment puis-je obtenir le même comportement (sans utiliser cette propriété) dans Spring Boot 2.0.x?
J'ai déjà lu Spring-Boot-Security-2.0 et security-changes-in-spring-boot-2-0-m4 et il n'y a rien qui concerne cette propriété.
Vous devez ajouter une configuration personnalisée de Spring Security, voir Guide de référence de Spring Spring :
28.1 Sécurité MVC
La configuration de sécurité par défaut est implémentée dans
SecurityAutoConfiguration
etUserDetailsServiceAutoConfiguration
.SecurityAutoConfiguration
importsSpringBootWebSecurityConfiguration
pour la sécurité Web etUserDetailsServiceAutoConfiguration
configure l'authentification, ce qui est également pertinent dans les applications non Web. Pour désactiver complètement la configuration de sécurité de l'application Web par défaut, vous pouvez ajouter un bean de typeWebSecurityConfigurerAdapter
(cela ne désactive pas la configurationUserDetailsService
ni la sécurité de l'actionneur).
Par exemple:
@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/**");
}
}
Pour utiliser la configuration uniquement pour un profil, ajoutez @Profile
à la classe. Si vous souhaitez l'activer par propriété, ajoutez ConditionalOnProperty
à la classe.
Voici comment j'ai fini par résoudre le problème. Voici un exemple de ma configuration de sécurité dans Spring Boot 1.5.x. La sécurité a été désactivée avec la propriété security.basic.enabled=false
:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/upload/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests()
.anyRequest().authenticated()
.and().httpBasic();
}
}
Puisque security.basic.enabled
a été supprimé dans Spring Boot 2 (mais toujours réservé comme nom de propriété), j'ai fini par utiliser security.enabled
en tant que propriété personnalisée. Voici un exemple de ma configuration dans Spring Boot 2:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${security.enabled:true}")
private boolean securityEnabled;
@Override
public void configure(WebSecurity web) throws Exception {
if (securityEnabled)
web.ignoring().antMatchers("/upload/**");
else
web.ignoring().antMatchers("/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
if (securityEnabled)
http.csrf().disable().authorizeRequests()
.anyRequest().authenticated()
.and().httpBasic();
}
}
Il existe une autre option pour désactiver la sécurité lors du démarrage du printemps 2
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
Ajouter ceci sur la classe principale
En réalité, il existe plusieurs réponses à certaines configurations pour cette question; Dans mon cas, j'ai joué à Spring Boot 2 avec Spring Security et JWT. Afin de sécuriser mes points de terminaison REST, je dois créer des jetons, etc. Après avoir écrit mon code et essayé de tester mes points de terminaison pour voir si JWT fonctionne correctement, la page de connexion par défaut me manque. J'ai essayé de changer le fichier de propriétés mentionné ci-dessus et je l'ai finalement désactivé en ajoutant l'annotation@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
à ma classe d'application.
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
public class JwtWithSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(JwtWithSpringBootApplication.class, args);
}
}