假设我在 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);
}
}
我知道 Controller 理想情况下应该没有逻辑。 Controller 有这样的认证逻辑合适吗,还是orderservice直接调用userAuthService?
如何防止此 if(valid) then return ... else return ... 在服务 deleteOrder、updateOrder 等的每个 CRUD 函数中重复...
最佳答案
值得一看spring security的请求身份验证和授权。
但是,如果您想保持简单,我建议在服务层处理授权逻辑。因此,从您的 Controller 调用 orderService.getAllOrders()
就足够了。
为了避免重复 if else
,您可以创建自定义运行时异常,并在授权失败时从服务中抛出此异常。您可以拥有一个全局异常处理程序,负责返回适当的 HTTP 状态代码
和 消息
。
引用this了解更多详情。
关于java - 在 spring Controller 中处理一些自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54863616/