假設我在 userAuthService 中找到了一個驗證函數,這在 OrderService 的每個函數中都是必需的@RequestMapping(path = {"/", ""}, method = RequestMethod.GET)public ResponseEntity<List<Order>> getAllOrders(@RequestHeader(value="userID") String userID) { boolean validUser = userAuthService.validateUserByID(userID); if(validUser) { return new ResponseEntity<>(orderService.getAllOrders(), HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.UNAUTHORIZED); }}我知道理想情況下控制器應該沒有邏輯??刂破魇欠襁m合具有這種身份驗證邏輯,或者 orderservice 是否應該直接調用 userAuthService?如何防止此 if(valid) then return ... else return ... 在服務 deleteOrder、updateOrder 等的每個 CRUD 函數中重復...
2 回答

慕哥9229398
TA貢獻1877條經驗 獲得超6個贊
如果項目允許,轉向 Spring Security 將是你最好的選擇。如果沒有,我可以為您提供兩個選擇 -
1.使用 preHandle 攔截器,為所需的端點注冊它。您可以從攔截器訪問請求,因此應該可以從中實現驗證邏輯。也可以從攔截器重定向。
Pro - 更簡單的實現
缺點 - 沒有跡象表明服務中發生了這種情況
2.使用spring AOP,在注解前實現自定義訪問控制。您可以注入請求以獲取所需的用戶 ID。您無法從之前的方面進行重定向,但您可以定義并引發授權異常,您將在全局異常處理程序中處理并從那里重定向。
Pro - 注釋清晰可見,易于添加或刪除,可以輕松制作方法或類注釋
缺點 - 更難實現
添加回答
舉報
0/150
提交
取消