2016-07-13 26 views
1

我目前在我的應用程序中通過Hibernate使用Jpa。由於spring security oauth2提供了JdbcTokenStore,我開始使用它。但問題是,我不能使用緩存(我的應用程序中的所有實體當前共享)。與JdbcTokenStore相比,JpaTokenStore在彈簧安全方面有什麼缺點嗎oauth

它在單獨的流中擊中數據庫。

我在考慮實施JpaTokenStore這是由Jpa &支持的緩衝區優勢隨之而來。

有沒有人嘗試使用這種方法來實現這個/看到任何缺點?

回答

1

在一個項目中,我用JPA破壞了org.springframework.security.oauth2.client.token.ClientTokenServices,並沒有注意到任何問題。我能夠使用JPA的所有標準功能,包括@Transactional for JPAClientTokenServices#saveAccessToken

1

沒有什麼能阻止你這麼做,並且很多人都會使用JPA來處理各種事情,但IMO JPA並不適合處理存儲的身份數據。 JPA的設計和優化是爲了在JDBC連接期間(基本上是一個事務)緩存數據,而身份數據通常具有不同且更長的生命週期。如果您使用JPA存儲長期數據,則必須處理在正常使用期限之外訪問時會發生的後果,例如,使用DTO,最終會在一定程度上否定使用它的好處。

+0

感謝您的回覆。通過「JPA自帶的緩存優勢」,我特別提到了二級緩存,而不是事務級緩存。通過使用額外的緩存層,如hazelcast/ehcache,我可以避免每次安全調用的db往返(因爲每個安全需要驗證訪問令牌)。 我無法完全遵循DTO的缺點,因爲緩存的AccessToken(無論主體是否爲DTO /實體),如果存在對基礎用戶的任何更新,則可以使Access&Refresh令牌緩存條目失效。 –

+0

我也可以修改JdbcTokenStore以利用外部緩存,但是當您擁有JPA時,在大多數情況下,大多數情況下會出於性能原因緩存用戶對象。 因此,我的觀點是,依靠在令牌生成過程中加速的用戶緩存也會更好 –