2017-10-04 48 views
0

我們有一大堆的安全Web服務(以Spring Security)這樣定義登錄:得到用戶id從一個「我」的相對ID /用戶/我的春天啓動API

@GetMapping("https://stackoverflow.com/users/{userId}") 
public User getUserInfo(@PathVariable String userId) { 
... 
@GetMapping("https://stackoverflow.com/users/{userId}/addresses") 
public User getUserInfo(@PathVariable String userId) { 

如果我想獲取已登錄的用戶,我可以將Principal principalHttpServletRequest request添加到該方法,並且spring將支持登錄用戶的數據,或者也可以使用SecurityContextHolder.getContext().getAuthentication()

到目前爲止,如果我們想獲取api /users/1234的登錄用戶,我們沒有任何問題。然而,我們得到了支持相對userId值爲me的要求,其中API將爲/users/me

我們可以通過在每個API中添加一個if語句並用實際登錄的userId替換userId me來解決此問題。我們不喜歡這個實現,因爲我們在20 apis中有一個樣板代碼。所以,我們嘗試的另一個解決方案是通過添加一個方面來替換真實用戶標識的me,但我不喜歡使用反射來解決此問題。

所以,我想知道是否有一個「春季啓動」的方式做到這一點?我還沒有找到任何支持此行爲的功能。

+0

我建議將它作爲一種新方法來實現,因爲在大多數情況下,您不能對自己和不同的用戶執行相同的操作。例如,您可以更改自己的用戶,但不能更改其他用戶。 – dur

回答

0

我認爲最好的解決方案是更改該URL。如果陳述也是明確的。攔截器也可以使用,但我不認爲它們與使用方面有很大不同,非常邪惡的東西。但是如果你確實使用了方面,我建議你有一個註釋,例如@Me,你可以註釋方法輸入,例如userId,如果參數等於我,它將用主體的id代替它們。

相關問題