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);
}
}
}
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 { ... }
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
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})
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
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
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
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
})
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();
}
}*/
security.ignored ist veraltet seit Spring Boot 2.
Für mich erweitern Sie einfach die Annotation Ihrer Application-Klasse: Trick:
@SpringBootApplication(exclude = SecurityAutoConfiguration.class)
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