2012-11-19 23 views
1

我在使用AspectJ在EJB環境中執行方法之前執行訪問檢查,因此我在攔截具有around通知的方法之前攔截控制流(我知道也有EJB攔截器)。如果訪問檢查失敗,我拋出一個AccessDeniedException。不幸的是,我得到的是一個EJBException,其原因是「AccessDeniedException」。我怎樣才能規避這種行爲?我在方法執行前拋出一個AccessDeniedException,但得到一個EJBException

+1

你不能。這是標準。您可以使用javax.annotation.security.RolesAllowed註釋進行安全檢查。這給你一個javax.ejb.EJBAccessException。 – Christian

+0

太糟糕了。一個用於觸發異常和先前建議的Joinpoint將會有所幫助......無論如何感謝 – tsh

回答

2

這是由系統和應用程序異常之間的差異造成的。這些大致對應於未檢查和檢查的例外。

他們每個人都有一定的屬性。系統異常將被封裝在一個EJBException中,發生異常的bean將被銷燬,並且任何掛起的事務將被回滾。

人們經常想要的是一個未經過檢查的異常,只能進行回滾。

您可以通過在您自己的某個異常類型(可以不選中)上使用@ApplicationException,然後相應地設置註釋的屬性來創建此類屬性。

+0

謝謝,非常有幫助。我不知道那個註釋。 – tsh

相關問題