2014-09-03 171 views
8

我試圖使用Spring Security java配置來保護Web應用程序。使用Spring Security Java配置時禁用基本身份驗證

這是配置的樣子: -

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

請注意,我有明確禁用HTTP基本身份驗證使用: -

.httpBasic().disable() 

我仍然得到HTTP Authenticaton提示框,同時在訪問安全網址。爲什麼?

請幫我解決這個問題。 我只想渲染捆綁的默認登錄表單。

春天引導入門版本:1.1.5 Spring Security的版本:3.2.5

感謝

+6

將'security.basic.enabled = false'添加到您的'application.properties'。你也不應該從覆蓋的方法調用'super.configure'。 – 2014-09-03 17:31:18

+0

@ M.Deinum修正了它。但是爲什麼當我在java配置中顯式禁用時它沒有被禁用? – 2014-09-03 17:33:36

+0

您可以擁有多個'WebSecurityConfigurer',每個貢獻配置的整體配置。這很可能是因爲你的網站的其餘部分受到基本身份驗證和具有表單的普通網站的保護。你可以創建2個'WebSecurityConfigurer'用於休息,一個用於表單。你也可能想結賬http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-security.html(Spring Boot reference,security section)。 – 2014-09-03 18:26:32

回答

6

如果你使用Spring開機後,documentation狀態:

要關閉引導默認配置完全在網絡中 應用程序中,您可以使用@EnableWebSecurity添加bean

所以,如果你想完全自定義自己可能是一個選項。

只是爲了說清楚......您只需要在您的主應用程序類或應用程序配置類上添加@EnableWebSecurity註釋。

+2

這對我不起作用(我把@EnableWebSecurity放在我的主要Spring Boot類和擴展的WebSecurityConfigurerAdapter上)。它實際上意味着'使用@EnableWebSecurity添加bean'? – Ivan 2015-03-31 16:47:03

16

首先調用super.configure(http);將在此之前覆蓋整個你的配置。試試這個:

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

小修正..應該是.httpBasic()。disable()。 – ticktock 2014-12-12 23:28:12

-4

以下爲我工作:

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

這不會禁用基本安全性,它會簡單地忽略對所有請求的安全檢查。 – jkerak 2016-11-04 14:17:35

1

您可以通過HttpSecurity實例禁用formLogin如下:

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

這將導致接收403 HTTP錯誤的時候試圖訪問任何安全資源

相關問題