web-dev-qa-db-fra.com

désactivation de la sécurité du printemps dans l'application de démarrage du printemps

J'ai une application Web de démarrage de printemps avec la sécurité de printemps configurée. Je veux désactiver l'authentification pendant un moment (jusqu'à ce que cela soit nécessaire).

J'ajoute ceci au application.properties

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

Voici une partie de mon 

Mais il me reste une sécurité de base incluse: un mot de passe de sécurité par défaut est généré au démarrage et je reçois toujours une boîte d’invite d’authentification HTTP. 

Mon pom.xml:

<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>fr.test.sample</groupId>
    <artifactId>navigo</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <!-- Inherit defaults from Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.1.RELEASE</version>
    </parent>

    <properties>
        <Java.version>1.7</Java.version>
        <jsoup.version>1.8.3</jsoup.version>
        <guava.version>18.0</guava.version>
        <postgresql.version>9.3-1103-jdbc41</postgresql.version>
    </properties>

    <!-- Add typical dependencies for a web application -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <dependency>
            <groupId>org.Apache.velocity</groupId>
            <artifactId>velocity</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>${jsoup.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            </dependency>
    </dependencies>

    <!-- Package as an executable jar -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <!-- Add Spring repositories -->
    <!-- (you don't need this if you are using a .RELEASE version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>

</project>

La sécurité est configurée dans WebSecurityConfig.Java (j'ai commenté l'annotation pour la désactiver):

//@Configuration
//@EnableWebSecurity
//@EnableGlobalMethodSecurity(prePostEnabled = true)
//@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    UserDetailsService userDetailsService;

    @Autowired
    UserService userService;

    @Autowired
    private DataSource datasource;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // http.authorizeRequests().antMatchers("/bus/topologie", "/home")
        // http.authorizeRequests().anyRequest().authenticated()
        // .antMatchers("/admin/**").access("hasRole('ADMIN')").and()
        // .formLogin().failureUrl("/login?error")
        // .defaultSuccessUrl("/bus/topologie").loginPage("/login")
        // .permitAll().and().logout()
        // .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
        // .logoutSuccessUrl("/login").permitAll().and().rememberMe()
        // .rememberMeParameter("remember-me")
        // .tokenRepository(persistentTokenRepository())
        // .tokenValiditySeconds(86400).and().csrf();
    }

    @Bean
    public PersistentTokenRepository persistentTokenRepository() {
        JdbcTokenRepositoryImpl tokenRepositoryImpl = new JdbcTokenRepositoryImpl();
        tokenRepositoryImpl.setDataSource(datasource);
        return tokenRepositoryImpl;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {

        PasswordEncoder encoder = new BCryptPasswordEncoder();

        auth.userDetailsService(userDetailsService).passwordEncoder(encoder);
        auth.jdbcAuthentication().dataSource(datasource);

        if (!userService.userExists("user")) {
            User userAdmin = new User("user", encoder.encode("password"), true);
            Set<Authorities> authorities = new HashSet<Authorities>();
            authorities.add(new Authorities(userAdmin,"ADMIN"));
            authorities.add(new Authorities(userAdmin,"CRIP"));
            authorities.add(new Authorities(userAdmin,"USER"));
            userAdmin.setAuthorities(authorities);

            userService.createUser(userAdmin);
        }
    }

}
34
jayjaypg22

Utilisez la propriété security.ignored:

security.ignored=/**

security.basic.enable: false désactivera simplement une partie des configurations automatiques de sécurité mais votre WebSecurityConfig sera quand même enregistrée.

Un mot de passe de sécurité par défaut est généré au démarrage.

Essayez de Autowired la AuthenticationManagerBuilder:

@Override
@Autowired
protected void configure(AuthenticationManagerBuilder auth) throws Exception { ... }
56
Ali Dehghani

Essaye ça. Faire une nouvelle classe

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity httpSecurity) throws Exception {
        httpSecurity.authorizeRequests().antMatchers("/").permitAll();
}

}

En gros, cela indique à Spring d'autoriser l'accès à chaque URL. @Configuration indique à spring qu'il s'agit d'une classe de configuration

14
bmarkham

Je pense que vous devez également supprimer la configuration automatique de sécurité de votre classe annotée @SpringBootApplication:

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

Utilisez @profile("whatever-name-profile-to-activate-if-needed") sur votre classe de configuration de sécurité qui étend WebSecurityConfigurerAdapter

security.ignored=/**

security.basic.enable: false

NB J'ai besoin de déboguer pour savoir pourquoi pourquoi exclure la configuration automatique n'a pas fonctionné pour moi. Mais le profil est tellement mauvais que vous pouvez toujours le réactiver via les propriétés de configuration si nécessaire

2
Breton F.

Vous pouvez simplement commenter la dépendance maven pendant un moment:

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
<!--        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>-->
</dependencies>

Ça a bien fonctionné pour moi

Désactiver à partir de application.properties est obsolète pour Spring Boot 2.0

1
Mehdi Bouzidi

Avec cette solution, vous pouvez complètement activer/désactiver la sécurité en activant un profil spécifique en ligne de commande. J'ai défini le profil dans un fichier application-nosecurity.yaml

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

Ensuite, j'ai modifié ma WebSecurityConfigurerAdapter personnalisée en ajoutant la @Profile("!nosecurity") comme suit:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@Profile("!nosecurity")
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {...}

Pour désactiver complètement la sécurité, il suffit de lancer l’application en spécifiant le nosecurity profile, c.-à-d.

Java -jar  target/myApp.jar --spring.profiles.active=nosecurity
1
Enrico Giurin

C’est la seule chose qui a fonctionné pour moi. J’ai ajouté l’annotation suivante à ma classe Application et exclu SecurityAutoConfiguration.

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration;

@EnableAutoConfiguration(exclude = {
        SecurityAutoConfiguration.class
})
1
Maoz Zadok

La réponse acceptée n'a pas fonctionné pour moi.

Si vous avez une configuration multiple, l’ajout des éléments suivants à votre classe WebSecurityConfig a fonctionné pour moi (assurez-vous que votre commande (1) est inférieure à toutes vos autres annotations de commande de la classe):

/* UNCOMMENT TO DISABLE SPRING SECURITY */
    /*@Configuration
    @Order(1)
    public static class DisableSecurityConfigurationAdapater extends WebSecurityConfigurerAdapter {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.antMatcher("/**").authorizeRequests().anyRequest().permitAll();
        }
    }*/
0
java-addict301

security.ignored est obsolète depuis Spring Boot 2.

Pour moi, simplement étendre l'annotation de votre application, la classe a fait le tour:

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
0
Joker

Puisque l'option security.disable est interdite d'utilisation, il existe toujours un moyen de l'obtenir à partir de la configuration pure sans toucher aux mouches de classe (pour moi, cela facilite la manipulation des environnements et la possibilité de l'activer avec une variable ENV) si vous utilisez Boot

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