假设我在 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 函数中重复...
2 回答
慕哥9229398
TA贡献1877条经验 获得超6个赞
如果项目允许,转向 Spring Security 将是你最好的选择。如果没有,我可以为您提供两个选择 -
1.使用 preHandle 拦截器,为所需的端点注册它。您可以从拦截器访问请求,因此应该可以从中实现验证逻辑。也可以从拦截器重定向。
Pro - 更简单的实现
缺点 - 没有迹象表明服务中发生了这种情况
2.使用spring AOP,在注解前实现自定义访问控制。您可以注入请求以获取所需的用户 ID。您无法从之前的方面进行重定向,但您可以定义并引发授权异常,您将在全局异常处理程序中处理并从那里重定向。
Pro - 注释清晰可见,易于添加或删除,可以轻松制作方法或类注释
缺点 - 更难实现
添加回答
举报
0/150
提交
取消