亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Spring Controller 中處理一些自定義驗證

在 Spring Controller 中處理一些自定義驗證

智慧大石 2022-07-06 17:22:33
假設我在 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 - 注釋清晰可見,易于添加或刪除,可以輕松制作方法或類注釋

缺點 - 更難實現


查看完整回答
反對 回復 2022-07-06
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

值得一看spring security for Authentication and Authorization of requests。

但是,如果你想保持簡單,我建議在服務層處理授權邏輯。所以,從你的控制器,調用orderService.getAllOrders()就足夠了。

為避免重復if else,您可以創建自定義運行時異常,并在授權失敗時從服務中拋出此異常。您可以擁有一個全局異常處理程序,該處理程序負責返回適當的HTTP status codeand message。

有關更多詳細信息,請參閱。


查看完整回答
反對 回復 2022-07-06
  • 2 回答
  • 0 關注
  • 90 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號