2015-04-14 62 views
0

我使用的是Spring-Security-Rest,spring-security-core和spring-security-ui插件的Grails v2.4.2。自定義UserDetailsS​​ervice不被調用 - Grails和Spring安全性核心

我寫了一個自定義UserDetailsS​​ervice使用戶名不區分大小寫。所有我做的只是試圖覆蓋

UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException 

com.example.core.CaseInsensitiveUserDetailsS​​ervice類定義爲:

class CaseInsensitiveUserDetailsService extends GormUserDetailsService { 

    /** 
    * Make The Username Case Insensitive 
    */ 
    UserDetails loadUserByUsername(String username, boolean loadRoles) throws UsernameNotFoundException { 
     Person.withTransaction { status -> 

      log.debug "Case Insensitive User Details Service" 

      // Find The Username 
      def user = Person.findByUsernameIlike(username) 

      // If User Not Found, Throw Exception 
      if (!user) { 
       log.warn "User not found: $username" 
       throw new UsernameNotFoundException('User not found', username) 
      } 

      Collection<GrantedAuthority> authorities = loadAuthorities(user, username, loadRoles) 
      createUserDetails user, authorities 
     } 
    } 
} 

resources.groovy包含:

beans = { 

    userDetailsService(com.example.core.CaseInsensitiveUserDetailsService) 

    credentialsExtractor(Grails24CredentialExtractor) 

    // Some Custom Filters Are Also Defined (securityContextRepository, securityContextPersistenceFilter, multipartResolver) 

} 

它編譯成功,但它從來沒有實際運行我的自定義CaseInsensitiveUserDetailsS​​ervice。在控制檯中,我從實際的GormUserDetailsS​​ervice中看到調試語句,而不是我自定義的調試語句。可以做些什麼來使用我的自定義UserDetailsS​​ervice?

** 注:我一直在關注這兩個教程:

  1. http://www.stevideter.com/2012/11/17/case-insensitive-usernames-using-spring-security-core-plugin-for-grails/
  2. http://grails-plugins.github.io/grails-spring-security-core/guide/userDetailsService.html
+0

您是否將其創建爲插件,然後將其安裝到應用程序中? – John

+0

不,它只是一個類 –

+0

你可以顯示你的配置(對安全和日誌記錄部分感興趣)以及請求和響應的輸出嗎? –

回答

0

做了不同的插件類似的,當我有一個類似的問題, Spring Security和佈線需要明確地按名稱排列。嘗試在resources.groovy

userDetailsService(com.example.core.CaseInsensitiveUserDetailsService) { bean-> 
    bean.autowire = "byName" 
} 
+0

這沒有意義。自動裝配更方便,因爲你不需要明確定義每一個,但是你可以隨時做到這一點 –

相關問題