假设我在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 code
和message
。
有关更多详细信息,请参考this。