wake-up-neo.net

deaktivierung der Federsicherheit in Spring Boot App

Ich habe eine Spring Boot-Web-App mit Federsicherheit konfiguriert. Ich möchte die Authentifizierung für eine Weile deaktivieren (bis sie benötigt wird).

Ich füge dies dem application.properties hinzu: 

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

Hier ist ein Teil von mir 

Aber ich habe immer noch eine grundlegende Sicherheit: Beim Start wird ein Standard-Sicherheitskennwort generiert, und ich bekomme immer noch eine HTTP-Authentifizierungsaufforderung. 

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

Die Sicherheit ist in WebSecurityConfig.Java konfiguriert (Ich habe die Anmerkung kommentiert, um sie zu deaktivieren):

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

Verwenden Sie die security.ignored-Eigenschaft:

security.ignored=/**

security.basic.enable: false deaktiviert lediglich einen Teil der automatischen Sicherheitskonfigurationen. Ihr WebSecurityConfig wird jedoch weiterhin registriert.

Beim Start wird ein Standardsicherheitskennwort generiert

Versuchen Sie, Autowired die AuthenticationManagerBuilder:

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

Versuche dies. Machen Sie eine neue Klasse

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

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

}

Im Grunde bedeutet dies, dass Spring Zugriff auf alle URLs zulässt. @Configuration sagt spring, dass es eine Konfigurationsklasse ist

14
bmarkham

Ich denke, Sie müssen auch die Sicherheitskonfiguration von Ihrer @SpringBootApplication-kommentierten Klasse entfernen:

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

Verwenden Sie @profile("whatever-name-profile-to-activate-if-needed") für Ihre Sicherheitskonfigurationsklasse, die WebSecurityConfigurerAdapter erweitert.

security.ignored=/**

security.basic.enable: false

NB. Ich muss debuggen, um zu wissen, warum die automatische Konfiguration der Konfiguration für mich nicht funktioniert hat. Das Profil ist jedoch so schlecht, dass Sie es bei Bedarf über die Konfigurationseigenschaften erneut aktivieren können

2
Breton F.

Sie könnten die Maven-Abhängigkeit für eine Weile kommentieren:

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

Es hat gut für mich funktioniert

Die Deaktivierung von application.properties ist für Spring Boot __ veraltet. 2,0

1
Mehdi Bouzidi

Mit dieser Lösung können Sie die Sicherheit vollständig aktivieren/deaktivieren, indem Sie ein bestimmtes Profil über die Befehlszeile aktivieren. Ich habe das Profil in einer Datei definiert application-nosecurity.yaml

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

Dann änderte ich meine benutzerdefinierte WebSecurityConfigurerAdapter durch Hinzufügen der @Profile("!nosecurity") wie folgt:

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

Um die Sicherheit vollständig zu deaktivieren, reicht es aus, die Anwendung durch Angabe des Profils nosecurity zu starten, d. H .:

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

Dies war das einzige, was für mich funktionierte. Ich fügte meiner Application-Klasse die folgende Anmerkung hinzu und schloss SecurityAutoConfiguration aus

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

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

Die akzeptierte Antwort hat bei mir nicht funktioniert.

Wenn Sie über mehrere Konfigurationen verfügen, fügen Sie der für mich funktionierenden WebSecurityConfig-Klasse Folgendes hinzu (stellen Sie sicher, dass Ihre Order (1) niedriger ist als alle anderen Order-Anmerkungen in der Klasse):

/* 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 ist veraltet seit Spring Boot 2.

Für mich erweitern Sie einfach die Annotation Ihrer Application-Klasse: Trick:

@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
0
Joker

Da die Option security.disable nicht mehr verwendet werden kann, gibt es immer noch eine Möglichkeit, die reine Konfiguration zu erreichen, ohne Klassenflügen zu berühren (für mich ist die Bequemlichkeit der Umgebungsmanipulation und die Möglichkeit der Aktivierung mit der ENV-Variablen erforderlich), wenn Sie Boot verwenden

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