簡體   English   中英

Spring 安全 Hibernate 加載具有惰性關聯的用戶

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM