2013-11-27 38 views
0

我的應用程序體系結構是像這樣:Grails的Spring Security的自定義用戶詳細信息豆類得到重寫

MainWebApp 
    -> CustSecPlugin 
    -> Spring-Security-Core 

所以我有我周圍的彈簧安全插件包,以提供額外的實現,在多個常見插件的網絡應用程序。我做的一件事是使用自定義UserDetailsService

我必須遵循這個指南,可以讓我的自定義安全插件在獨立運行時,自定義用戶的詳細信息,豆grails-app/conf/spring/resources.groovy

定義該文件沒有得到因爲它的一個插件讀取,所以我將豆類移入doWithSpring {}關閉。這在獨立運行時仍然有效。

不過我現在所發現的是,當與Web應用程序運行,我的自定義信息服務被忽略,現在的校長是一個標準的GrailsUser

如果我把我的bean定義,並將其移動到Web的應用程序的grails-app/conf/spring/resources.groovy然後它的工作。不過,我不想在每個使用此插件的應用程序中定義這些bean。

我不確定發生了什麼。爲什麼userDetailsService() bean作爲Web應用程序的插件運行時會被忽略?我可以看到其他bean正在被正確設置(打印出所有的bean名稱並使自己成爲一個虛擬bean)。它幾乎像它恢復了一樣。

有沒有什麼地方可以定義這個bean來使它工作?

如何解決此問題的最佳方法是?

回答

1

這可能是插件的加載順序。你可以在你的插件描述符中改變它:

def loadAfter = ["springSecurityCore"] 

這將強制你的bean將被加載到核心插件之後。

+0

我唯一的問題是我的內部插件設置了安全核心插件的配置參數。而我發現的是,如果我的包裝插件在覈心之後加載,則配置無法正確設置,並且插件無法加載。我的插件中是否有其他地方可以聲明bean? – DJOodle

+0

對於通常我使用插件[Platform Core](http://grails.org/plugin/platform-core)的配置。它有一個關閉'doWithConfig'來聲明將與應用程序合併的配置。 –

+0

啊平臺核心和loadAfter的結合解決了我的問題,之前沒看過這個插件。乾杯 – DJOodle

相關問題