2

我需要爲登臺服務器設置全局基本HTTP身份驗證。沒有什麼花哨。我只想要求用戶名/密碼來訪問任何東西。我也只想使用Java配置。我已經嘗試了很多不同的解決方案,但都沒有工作。我總是能夠訪問服務器上的所有資源。這是我現在在做什麼:Spring MVC 4全局基本HTTP身份驗證

@Configuration 
@EnableWebSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
    System.out.println("Configuring HttpSecurity"); 

    http 
      .authorizeRequests() 
      .anyRequest().authenticated() 
      .and() 
      .httpBasic(); 
    } 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
    System.out.println("Configuring global AuthenticationManagerBuilder"); 

    auth 
      .inMemoryAuthentication() 
      .withUser("user").password("password").roles("USER"); 
    } 
} 

我可以在正在執行這些片段中的日誌中看到。如您所見,在第一種方法中,我要求所有請求都經過身份驗證。在第二種方法中,我在內存認證中指定。

+0

你得到的錯誤是什麼?還有你是如何嘗試登錄的?需要更多的信息給問題 – ArunM

+0

沒有錯誤。問題是我沒有提示執行基本的HTTP身份驗證。每當請求任何資源時,我都希望始終需要基本的HTTP身份驗證。 –

回答

0

由於@Configuration(由於它也是由@EnableWebSecurity聲明,因此不再需要)您的SOP語句正在打印(而容器實例化)。如果您希望將其與應用程序過濾器鏈一起使用,您仍然需要在web.xml或MVC初始化程序類中註冊spring安全過濾器鏈,該類可擴展WebMvcConfigurerAdapter或實現WebApplicationInitializer。例如(java配置,因爲你正在尋找相同的):

EnumSet<DispatcherType> dispatcherTypes = EnumSet.of(
      DispatcherType.REQUEST, DispatcherType.ERROR); 
container.addFilter("springSecurityFilterChain", 
      DelegatingFilterProxy.class).addMappingForUrlPatterns(
      dispatcherTypes, false, "/*"); 

其中容器是一個ServletContext的實例。