Jakarta ee I';我在方法执行之前抛出一个AccessDeniedException,但得到一个EJBException

Jakarta ee I';我在方法执行之前抛出一个AccessDeniedException,但得到一个EJBException,jakarta-ee,ejb,aspectj,Jakarta Ee,Ejb,Aspectj,我正在使用AspectJ在EJB环境中执行方法之前进行访问检查,因此我在方法之前拦截控制流,并提供一个环绕建议(我知道也有EJB拦截器)。如果访问检查失败,我将抛出AccessDeniedException。不幸的是,我得到的是一个原因为“AccessDeniedException”的EJBException。如何避免这种行为?这是由系统和应用程序异常之间的差异造成的。这些异常大致对应于非检查异常和检查异常 它们每一个都有一定的属性。系统异常将被包装在EJBException中,发生异常的bea

我正在使用AspectJ在EJB环境中执行方法之前进行访问检查,因此我在方法之前拦截控制流,并提供一个环绕建议(我知道也有EJB拦截器)。如果访问检查失败,我将抛出AccessDeniedException。不幸的是,我得到的是一个原因为“AccessDeniedException”的EJBException。如何避免这种行为?

这是由系统和应用程序异常之间的差异造成的。这些异常大致对应于非检查异常和检查异常

它们每一个都有一定的属性。系统异常将被包装在EJBException中,发生异常的bean将被销毁,任何挂起的事务都将回滚

人们通常想要的是一个非检查异常,它只执行回滚


您可以通过在自己的异常类型之一(可以不选中)上使用@ApplicationException,然后相应地设置注释的属性来创建这样的异常

你不能。这是标准。您可以使用javax.annotation.security.RolesAllowed注释进行安全检查。这会给您一个javax.ejb.EJBAccessException.Too bad。触发异常的连接点和before建议将非常有用。。。谢谢你,非常有帮助。我不知道那个注释。