我正在尝试在我的项目中实现CommonExceptionHandler类。我在Google上搜索过,有多种方法可以实现它。我发现的两个最常见的是一个。请帮助我,当我应该使用AccessDeniedHandler(接口)和ResponseEntityExceptionHandler(类)时。
当我在项目中启用安全配置时,它们有什么不同??
答案 0 :(得分:1)
为清楚起见,ResponseEntityExceptionHandler
和AccessDeniedHandler
之间没有任何关系。第一个用于集中处理Spring MVC引发的最常见异常。它提供了大约17种受保护的方法,您可以重写这些方法以自定义异常后的响应。您可以找到更多详细信息here
用法示例:
@ControllerAdvice // or @RestControllerAdvice
public class CommonExceptionHandler extends ResponseEntityExceptionHandler {
}
关于doc上指示的第二个AccessDeniedHandler
:Handles an access denied failure.
当某人尝试访问她/他/他不允许的资源时,会引发拒绝访问异常访问它。
现在,如果您的问题是:您的CommonExceptionHandler
还能处理AccessDeniedHandler
异常吗?是的,这样做:
@ControllerAdvice // or @RestControllerAdvice
public class CommonExceptionHandler extends ResponseEntityExceptionHandler implements AccessDeniedHandler {
}
但是我建议您在另一个类中处理安全性异常:
public class CommonSecurityExceptionHandler implements AccessDeniedHandler {
}
答案 1 :(得分:0)
最好使用我正在尝试在我的项目中实现CommonExceptionHandler类。
ResponseEntityExceptionHandler,因为它可以处理任何 sql , javax验证, http方法和任何自定义异常。它使您能够使用状态代码自定义错误消息。 Here是如何配置自定义错误处理程序的示例。
根据文档, AccessDeniedHandler 只能处理类型为 AccessDeniedException 的异常。根据上面提到的链接,您可以通过遵循新方法来处理 AccessDeniedException 。
@ExceptionHandler(AccessDeniedHandler.class)
@ResponseStatus(value = HttpStatus.CONFLICT)
public Map<String, String> handleAccessDeninedException(AccessDeniedHandler ex) {
// write your own logic to return user friendly response
}