2014-02-12 64 views
0

我想在擴展WebSecurityConfigurerAdapter的類中使用Spring的安全的Java配置。我正在使用版本3.2.0.RELEASE。爲什麼.and()。httpBasic();不工作在WebSecurityConfigurerAdapter

在HttpSecurity.java類中有一個示例如下。

protected void configure(HttpSecurity http) throws Exception { 
    http 
     .authorizeRequests() 
      .antMatchers("/**").hasRole("USER").and() 
      .httpBasic(); 
} 

當我嘗試在我的項目中使用這個確切的例子中,。而()方法不就可以了.httpBasic()方法返回一個對象。傳遞給configure()方法的HttpSecurity http對象具有.httpBasic()對象。

我想了解爲什麼這個規範的例子不起作用。這看起來很簡單,我已經看到遍佈整個網絡的代碼以相同的方式使用它。

我有錯誤的版本嗎?我看到有些人使用release candiate,但我認爲3.2.0.RELEASE版本是最新的(如此處列出http://projects.spring.io/spring-security/)。

回答

2

您的代碼在Eclipse中使用Maven和Gradle編譯得很好。我猜你正在使用具有bug for handling the generic return types的IntelliJ。在此期間,您可以將authorizeRequests()移動到底部,IntelliJ將編譯其餘部分。

通過我會鼓勵你使用以下方式:

protected void configure(HttpSecurity http) throws Exception { 
    http 
     .httpBasic() 
      .and() 
     .authorizeRequests() 
      .anyRequest().hasRole("USER"); 
} 

三個轉變:

  • 移動authorizeRequests()的底部來解決的IntelliJ錯誤
  • 你可以使用anyRequest()匹配器而不是antMatchers(「/ **」)這是同樣的事情,但增加了可讀性並給你編譯時間檢查
  • 更改格式匹配Spring Security Java Config Preview: Readability

PS:另外值得注意的是http://youtrack.jetbrains.com/issue/IDEA-118527

+0

謝謝,我雖然T I是失去我的腦海裏。 – Jazzepi

0

我不知道爲什麼這個例子是錯誤的,但這是有效的。

protected void configure(HttpSecurity http) throws Exception { 
    http.httpBasic(); 
    http 
     .authorizeRequests() 
      .antMatchers("/**").hasRole("USER"); 
}