J'essaie de sécuriser une application Web à l'aide de la configuration Java de Spring Security.
Voici à quoi ressemble la configuration: -
@Configuration
@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
private String googleClientSecret;
@Autowired
private CustomUserService customUserService;
/*
* (non-Javadoc)
*
* @see org.springframework.security.config.annotation.web.configuration.
* WebSecurityConfigurerAdapter
* #configure(org.springframework.security.config
* .annotation.web.builders.HttpSecurity)
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/","/static/**", "/resources/**","/resources/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic().disable()
.requiresChannel().anyRequest().requiresSecure();
// @formatter:on
super.configure(http);
}
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
// @formatter:off
auth
.eraseCredentials(true)
.userDetailsService(customUserService);
// @formatter:on
super.configure(auth);
}
}
Notez que j'ai explicitement désactivé l'authentification HTTP Basic en utilisant: -
.httpBasic().disable()
J'obtiens toujours la boîte d'invite d'authentification HTTP tout en accédant à une URL sécurisée. Pourquoi?
S'il vous plaît, aidez-moi à résoudre ce problème ... Je veux juste afficher le formulaire de connexion par défaut fourni.
Version de démarrage pour Spring Boot: 1.1.5 Version de sécurité pour Spring: 3.2.5
Merci
Tout d’abord, appeler super.configure(http);
remplacera l’ensemble de votre configuration antérieure.
Essayez ceci à la place:
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic().disable();
Si vous utilisez Spring Boot, la documentation indique:
Pour désactiver complètement la configuration par défaut du démarrage sur un site Web application, vous pouvez ajouter un bean avec @EnableWebSecurity
Donc, si vous voulez vous personnaliser complètement, cela pourrait être une option.
Juste pour que ce soit clair… Il vous suffit de mettre l'annotation @EnableWebSecurity sur votre classe d'application principale ou votre classe de configuration d'application.
Vous pouvez désactiver le formulaire d'inscription via l'instance HttpSecurity comme suit:
http.authorizeRequests().antMatchers("/public/**").permitAll()
.antMatchers("/api/**").hasRole("USER")
.anyRequest().authenticated()
.and().formLogin().disable();
Cela entraînera la réception d'une erreur 403 Http lors de la tentative d'accès à une ressource sécurisée.
option anonyme a fonctionné pour moi
http.csrf (). disable (). headers (). frameOptions (). sameOrigin (). and (). authorizeRequests (). anyRequest (). anonymous (). et (). httpBasic (). disable ();