项目中使用了shiro做权限控制,在controller上注解了@RequiresPermissions,当没有权限时,会抛出异常,但是这个异常是在拦截器中抛出的,spring boot的ControllerAdvisor无法捕捉到。
请教下,如何进行处理?
项目中使用了shiro做权限控制,在controller上注解了@RequiresPermissions,当没有权限时,会抛出异常,但是这个异常是在拦截器中抛出的,spring boot的ControllerAdvisor无法捕捉到。
请教下,如何进行处理?
没大明白你确切想做什么,如果你是想要一个统一的异常捕捉类的话,我可以给你提供一个思路。Spring可以通过注解和xml方式达到这样的效果。看你的风格应该是注解比较习惯的,那我讲讲简单的Ex 抛出处理,首先创建一个MyExceptionAdviceHandler类,加上@ControllerAdvice注解,该注解是控制器的一个增强,作用于所有RequestMapping注解上(没有指定特定包的情况下),然后声明一个processException的方法,携带有一个Exception的参数ex,该方法需要对控制器的异常捕捉因此需要@ExceptionHandler,同时我建议再加上一个@ResponseBody注解,可以友好一点。然后声明一个ApiResponse对象并把ex异常注入其中然后返回,这样一个通用捕捉类就写好了。我写段样例代码吧,如果有不正的地方欢迎大牛拍砖指正。
`
@ControllerAdivce
public class MyExceptionHandler{
@ResponseBody
@ExceptionHandler
public ApiResponse processEx(Exception ex){
ApiResponse resp = ApiResponse.responseError(ex);
return resp;
}
}
`
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
3 回答1.7k 阅读✓ 已解决
最后,是通过增加了一个HandlerInterceptor,这个方法可行,但是处理异常的地方就变成了两处,另一个是controller层异常的统一处理,总觉得不是太好的方案。
@Component
public class PreControllerExceptionIntercep implements HandlerInterceptor {
}