java - 在 spring Controller 中处理一些自定义验证

标签 java spring-boot controller microservices

假设我在 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);
    }
}
  1. 我知道 Controller 理想情况下应该没有逻辑。 Controller 有这样的认证逻辑合适吗,还是orderservice直接调用userAuthService?

  2. 如何防止此 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/

相关文章:

java - 查询从 Java 层在数据库中的保存的 Json 中插入新的 json 字符串

java - 为什么 SQL 中的 CHAR(1) 占用 1 个字节,而 java 中的 char 占用 2 个字节?

拉拉维尔。使用查询生成器获取表的单列值

JavaFX addListener 不工作

java - 将字符串传递给使用 application/json 的 REST API

spring boot 2.7.0 不公开 http.server.request 指标

java - 当我想在集合中保存多个bean时,是否需要在Spring中同步@Autowired方法?

java - Spring Security/Spring Boot - 如何为用户设置角色

angularjs - 将数组对象从 Controller 传递到 AngularJS 中的自定义指令

spring - 未调用 ResponseEntityExceptionHandler 的重写 handleMethodArgumentNotValid 方法