2014-09-03 7 views
8

Sto tentando di proteggere un'applicazione Web utilizzando la configurazione java di Spring Security.Disabilitare l'autenticazione di base mentre si utilizza la configurazione Java di Spring Security

Questo è come la configurazione appare: -

@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); 
    } 
} 

Si noti che ho esplicitamente disabilitato l'autenticazione HTTP Basic utilizzando: -

.httpBasic().disable() 

ancora sto ottenendo HTTP Authenticaton prompt dei box, mentre l'accesso a un assicurato url. Perché?

Si prega di aiutarmi a risolvere questo. Voglio solo rendere il modulo di login predefinito che viene fornito in bundle.

Primavera Boot Starter Versione: 1.1.5 Primavera di sicurezza Versione: 3.2.5

Grazie

+6

aggiungere 'security.basic.enabled = false' al proprio' application.properties'. Inoltre non dovresti chiamare 'super.configure' dal tuo metodo sovrascritto. –

+0

@ M.Deinum Che l'ha risolto. Ma perché non è stato disabilitato quando ho disabilitato esplicitamente in java config? –

+0

È possibile avere più 'WebSecurityConfigurer' per ciascuna configurazione che contribuisce alla configurazione generale. Molto bene potrebbe essere che hai una parte di riposo del tuo sito Web che è protetto dall'autenticazione di base e il sito normale con un modulo. È possibile creare 2 'WebSecurityConfigurer' uno per il resto e uno per il modulo. Potresti anche voler controllare http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-security.html (riferimento Spring Boot, sezione sicurezza). –

risposta

6

Nel caso in cui si utilizza Primavera di avvio, i documentation stati:

Per spegnere il Avvia completamente la configurazione di default in un'applicazione web puoi aggiungere un bean con @EnableWebSecurity

Quindi, se si desidera personalizzare completamente se stesso che potrebbe essere un'opzione.

Giusto per chiarire ... È sufficiente inserire l'annotazione @EnableWebSecurity nella classe principale dell'applicazione o nella classe di configurazione dell'applicazione.

+2

Questo non ha funzionato per me (ho messo @EnableWebSecurity sulla mia classe Spring Boot principale e ho esteso WebSecurityConfigurerAdapter). Cosa significa in realtà 'aggiungere un bean con @EnableWebSecurity'? – Ivan

16

Prima di tutto chiamare super.configure (http); sovrascriverà tutta la tua configurazione che hai prima. Prova questo:

http 
    .authorizeRequests() 
     .anyRequest().authenticated() 
     .and() 
    .formLogin() 
     .and() 
    .httpBasic().disable(); 
+1

piccola correzione .. dovrebbe essere .httpBasic(). Disable(). – ticktock

-4

Di seguito ha lavorato per me:

  http 
       .authorizeRequests() 
       .anyRequest().permitAll(); 
+5

Questo non disabiliterà la sicurezza di base, semplicemente ignorerà il controllo di sicurezza per tutte le richieste. – jkerak

1

È possibile disattivare la FormLogin attraverso l'istanza HttpSecurity come segue:

http.authorizeRequests().antMatchers("/public/**").permitAll() 
     .antMatchers("/api/**").hasRole("USER") 
     .anyRequest().authenticated() 
     .and().formLogin().disable(); 

Questo porterà riceve 403 errore HTTP quando tentando di accedere a qualsiasi risorsa protetta