此代碼獲取年代當前登錄的用戶,使用Spring安全插件(Acegi的):如何保存春季安全登錄的用戶在會話
def principalInfo = authenticateService.principal()
def person = null
if (principalInfo != "anonymousUser" && principalInfo.username) {
person = Person.findByUsername(principalInfo.username)
}
然後,我會喜歡做的事:
session.user = person
這需要在用戶登錄後完成。我無法弄清楚在哪裏放置我的代碼來執行此操作。它似乎應該是登錄控制器中的某個地方,但我看不到在哪裏。
幾乎工程,但如果你訪問任何相關財產如果失敗,例如如果我做 person = authenticateService.userDomain() company = person.company 我得到一個LazyInitializationException。可能這就是爲什麼人們使用上面的代碼? 這是我需要一個自定義的userDetailsService?或者會設置渴望解決問題? – 2010-05-30 20:11:58
您可以使用預先抓取,但如果您只需要它就可以使用這種用例。爲了避免LIE,您可以重新附加實例(def person = authenticateService.userDomain(); person.attach())或通過id(def person = Person.get(authenticateService.userDomain()。id))重新加載它。這比預先加載更好,因爲只有當你知道需要時才能做到這一點 - 如果你只需要字符串,布爾值或數字屬性,那麼就不需要重新附加或重新加載。 – 2010-05-31 03:37:42
person.attach()給了我一個NonUniqueObjectException,但def person = Person.get(authenticateService.userDomain()。id)的作品。 謝謝! – 2010-05-31 07:14:09