2014-03-13 84 views
7

我使用下面的Java配置在Spring Security:混淆使用Java配置

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

基於此配置,所有的請求進行身份驗證。當您未經認證而擊中控制器時,AnonymousAuthenticationFilter將爲您創建一個身份驗證對象username=anonymousUser, role=ROLE_ANONYMOUS

我試圖提供AA特定的控制器方法匿名訪問,並嘗試使用以下每一項:

  1. @Secured("ROLE_ANONYMOUS")
  2. @Secured("IS_AUTHENTICATED_ANONYMOUSLY")

當被調用的控制方法,給出以下響應: 「HTTP狀態401 - 訪問此資源需要完全身份驗證」

有人可以幫助我理解爲什麼我們收到此消息,並且爲什麼ROLE_ANONYMOUS/IS_AUTHENTICATED_ANONYMOUSLY似乎無法使用此配置?

感謝,
JP

回答

3

您的安全配置阻止所有未經驗證的請求。 你應該允許訪問控制器

.antMatchers("/mycontroller").permitAll() 

參見:

+0

嗯...這是我不夠明確。如果我使用前面指定的java config調用給定的url,如果我沒有使用基本認證提供憑證,AnonymousAuthenticationFilter步入並創建一個認證對象,但使用ROLE_ANONYMOUS。這不應該仍然工作?我不知道你上面的配置應該是必要的。思考? – user2145809

+1

這是必要的,因爲ROLE_ANONYMOUS指示用戶是匿名的而不是經過身份驗證的。請注意,您在控制器上指定的註釋不會覆蓋基於URL的安全性,它們將對其進行補充以提供縱深防禦(即多層安全性)。 –

+0

Rob,我認爲我的困惑源於對帶有特定的@RequestMapping(value =「/ mycontroller」)映射註釋的控制器方法使用@Secured(「ROLE_ANONYMOUS」)是註釋「equivalent」:.antMatchers (「/ mycontroller」)。permitAll()或者.antMatchers(「/ mycontroller」)。hasRole(「ROLE_ANONYMOUS」)。根據你所說的話,註釋配置不能替代xml/java配置(比如@RequestMapping是如何替代xml控制器映射的)。它是否正確? – user2145809