Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @预授权停止传播在安全检查评估期间引发的异常_Java_Spring_Spring Boot_Spring Security - Fatal编程技术网

Java @预授权停止传播在安全检查评估期间引发的异常

Java @预授权停止传播在安全检查评估期间引发的异常,java,spring,spring-boot,spring-security,Java,Spring,Spring Boot,Spring Security,我有一个具有多个端点的控制器。每个端点都映射到一个可能返回200或抛出异常的服务,然后处理该异常并返回正确的错误消息 例如,如果找不到用户,我抛出一个UserNotFoundException,然后在ControllerAdvisor中捕获该异常,并将其映射到404 not found中 一切正常,直到我添加了@PreAuthorize。看起来是这样的: @PreAuthorize("@userController.userService.getUser(#userId).userna

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

例如,如果找不到用户,我抛出一个
UserNotFoundException
,然后在ControllerAdvisor中捕获该异常,并将其映射到404 not found中

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

@PreAuthorize("@userController.userService.getUser(#userId).username == authentication.principal.name")
问题是,如果
getUser
抛出异常,我会得到500而不是404

堆栈跟踪如下所示:

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

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

原因:UserNotFoundException

因此,问题似乎是由
UserNotFoundException
引起的,而
预授权
实现没有正确地重新抛出该异常

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