我有一個自定義的註釋是這樣的:如何在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