我有一个自定义的注释是这样的:如何在Spring @ExceptionHandler中捕获自定义注释?
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
@PreAuthorize(AllowedForSystemUsers.condition)
public @interface AllowedForSystemUsers {
String condition = "hasAnyRole({'ROLE_ADMIN', 'ROLE_USER'})";
}
,我把注释在我Controller
方法是这样的:
@RequestMapping(value="/search", method=RequestMethod.POST)
@AllowedForSystemUsers
public String searchRooms(@ModelAttribute Booking booking, Model model, long type) {
//do something
}
我ExceptionHandler
这样的:
@ExceptionHandler(value = AccessDeniedException.class)
public ModelAndView accessDenied(HttpServletRequest request, HttpServletResponse response, AccessDeniedException e) {
return new ModelAndView("redirect:/error");
}
所以当用户没有身份验证ROLE_ADMIN
或ROLE_USER
,AccessDeniedException
发生和co去运行accessDenied()
方法。
我的问题是我怎么知道@AllowedForSystemUsers
注释是否触发这AccessDeniedException
?其他代码也可能触发AccessDeniedException
谢谢!
您需要在控制器中抛出异常。为了执行全局异常处理程序,您需要从其他地方抛出异常。 –
你可以考虑在'@ AllowedForSystemUsers'处理中创建'AccessDeniedException'的子类,并抛出它。例如,在@SungJinSteveYoo中处理 –
? – YOUNG