J'utilise spring-boot-starter-security
dépendance, pour utiliser plusieurs classes fournies avec spring-security
. Mais comme je veux l'intégrer dans une application vaadin
existante, je veux seulement utiliser les classes, et non pas l'écran de connexion/authentification par défaut de spring.
Comment désactiver cet écran?
Je ne peux faire aucune configuration en étendant WebSecurityConfigurerAdapter
comme ma classe d'entrée principale déjà extends SpringBootServletInitializer
. De plus, les applications vaadin s'exécutent essentiellement sur le même chemin URL tout le temps et utilisent la navigation interne.
@EnableAutoConfiguration
public class MyApp extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyApp.class);
}
public static void main(String[] args) {
SpringApplication.run(MyApp.class, args);
}
}
Alors, que puis-je faire pour désactiver l'écran de connexion, mais utiliser les fonctionnalités de sécurité Spring?
vous pouvez utiliser Java comme ceci:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity security) throws Exception
{
security.httpBasic().disable();
}
}
et redémarrez votre application si elle est actualisée automatiquement.
Pour désactiver complètement la route de connexion, utilisez l'objet de configuration Spring Security
L'extrait de code suivant utilise org.springframework.boot:2.1.6.RELEASE
@Configuration
@EnableWebSecurity
class SecurityConfig : WebSecurityConfigurerAdapter() {
override fun configure(security: HttpSecurity) {
super.configure(security)
security.httpBasic().disable()
security.cors().and().csrf().disable().authorizeRequests()
.anyRequest().authenticated()
.and().formLogin().disable() // <-- this will disable the login route
.addFilter(JWTAuthorizationFilter(authenticationManager()))
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
}
@Bean
fun corsConfigurationSource(): CorsConfigurationSource {
val source = UrlBasedCorsConfigurationSource()
val config = CorsConfiguration().applyPermitDefaultValues()
config.addExposedHeader("Authorization")
source.registerCorsConfiguration("/**", config)
return source
}
}
Sur la classe d'application Spring-Boot principale (la classe qui a l'annotation @SpringBootApplication)
@SpringBootApplication(exclude={SecurityAutoConfiguration.class})
Si quelqu'un a encore besoin de la solution, mettez une méthode dans le contrôleur REST comme ceci:
@RestController
public class myRestController{
@GetMapping("/login")
public String redirectTo(){
return "yourRedirectLink";
}
}
Cette solution est très bonne pour travailler avec un ressort et réagir dans un pot
Il semble y avoir une solution plus simple.
Placez simplement cette annotation au-dessus de votre classe principale ou au même endroit que votre annotation SpingBootApplication
@EnableAutoConfiguration(exclude = {org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})