[英]Spring Security Hibernate load user with lazy associations
我正在構建一個 Spring 數據 JPA 應用程序並使用 Z38008DD81C2F4D7985ECF60CE1 保護我的 API 調用
Principal 是通過我的自定義實現UserDetailsService.loadByUsername
(...) 加載的,僅檢索User
實體本身,因為它的所有關聯默認情況下都是 LAZY。
這是通過 Spring 過濾器在每個 controller 被擊中之前完成的(我正在做 JWT Auth)
但是,對於某些請求(例如POST /todo
),我還需要加載一些用戶的惰性關聯(用戶的 Todos),以便向它們添加新數據並將其持久化。
是否有建議的做法來實現這一目標? 我的目標是在通過SecurityContextHolder.getContext().getAuthentication().getPrincipal()
獲取主體時已經加載了一些關聯(取決於上下文),而不必將它們設置為 EAGER。
類似於覆蓋UserDetailsService.loadByUsername
以在我需要時按需加入關聯。
謝謝
讓這些關聯在代碼中請求時延遲加載有什么問題? 您始終可以先從實體管理器中分離實體,然后根據上下文使用您需要的 fetch 連接重新加載它。 就像是:
User u = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
entityManager.detach(u);
u = entityManager.createQuery("from User u join fetch ... where u.id = :id")
.setParameter("id", u.getId())
.getResultList()
.get(0);
// Work with u
您根本不需要加載關聯的@ManyToOne
(如 Todos)部分。 只需創建新的TodoEntity
為其分配一個用戶並保存。
如果您需要修改任何內容,最好與用戶分開處理所有用戶的關聯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.