代码之家  ›  专栏  ›  技术社区  ›  Christian Vincenzo Traina

@预授权停止传播自定义异常

  •  0
  • Christian Vincenzo Traina  · 技术社区  · 3 年前

    我有一个有几个端点的控制器。每个端点都映射到一个服务,该服务可以返回200或抛出异常,然后处理该异常并返回正确的错误消息。

    例如,如果找不到用户,我抛出 UserNotFoundException 把它映射到一个404找不到的地方。

    一切正常,直到我添加了@PreAuthorize。看起来是这样的:

    @PreAuthorize("@userController.userService.getUser(#userId).username == authentication.principal.name")
    

    问题是如果 getUser

    堆栈跟踪如下所示:

    java.lang.IllegalArgumentException:无法计算表达式'@userController.userService.getUser(#userId).username==authentication.principal.name'

    在。。。

    原因:org.springframework.expression.ExpressionInvocationTargetException:尝试对类型的对象执行方法“getUser”时出现问题。。。

    原因:UserNotFoundException

    所以看起来问题是由 UserNotFoundException异常 ,而不是由 PreAuthorize

    这看起来像是一个典型的场景,但我做了很多研究,没有找到任何解决方案。找不到用户时如何获取404?

    0 回复  |  直到 3 年前