我們有一大堆的安全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 principal
或HttpServletRequest request
添加到該方法,並且spring將支持登錄用戶的數據,或者也可以使用SecurityContextHolder.getContext().getAuthentication()
。
到目前爲止,如果我們想獲取api /users/1234
的登錄用戶,我們沒有任何問題。然而,我們得到了支持相對userId值爲me
的要求,其中API將爲/users/me
。
我們可以通過在每個API中添加一個if
語句並用實際登錄的userId替換userId me
來解決此問題。我們不喜歡這個實現,因爲我們在20 apis中有一個樣板代碼。所以,我們嘗試的另一個解決方案是通過添加一個方面來替換真實用戶標識的me
,但我不喜歡使用反射來解決此問題。
所以,我想知道是否有一個「春季啓動」的方式做到這一點?我還沒有找到任何支持此行爲的功能。
我建議將它作爲一種新方法來實現,因爲在大多數情況下,您不能對自己和不同的用戶執行相同的操作。例如,您可以更改自己的用戶,但不能更改其他用戶。 – dur