假设我在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);
    }
}



我知道控制器理想上应该没有逻辑。控制器具有这种身份验证逻辑是否合适,或者orderservice应该直接调用userAuthService?
我如何防止这种if(valid)then return ... else return ...在服务deleteOrder,updateOrder等的每个CRUD函数中重复出现...

最佳答案

值得一看的是Spring Security对请求的身份验证和授权。

但是,如果您想保持简单,建议您在服务层中处理授权逻辑。因此,从您的控制器中,调用orderService.getAllOrders()应该足够了。

为避免重复if else,可以创建自定义运行时异常,并在授权失败时从服务中抛出该异常。您可以拥有一个全局异常处理程序,该处理程序负责返回相应的HTTP status codemessage

有关更多详细信息,请参考this

10-07 19:27