假设我有一个看起来像这样的拦截器:
public class AuthorizationInterceptor {
Logger log = Logger.getLogger(getClass().getName());
@AroundInvoke
private Object authorize(InvocationContext ic) throws Exception{
// ... some other logic for authorization
if (!allowedMethods.contains(ic.getMethod().getName())){
log.info("Authorization failed. Preparing to throw exception");
throw new AuthException("Authorization failed for method " +
ic.getMethod().getName());
}
return ic.proceed();
}
}
应用于我的EJB的不同方法。
我通常希望将异常throed传递给调用客户端,就像所有正常的EJB异常一样。
显然,如果我从Interceptor中抛出它,就不会发生这种情况......它甚至没有记录在服务器上;喜欢它永远不会被抛出 - 虽然它是 - 从不执行return语句。
我做错了什么?
我正在使用GF 3.0.1
答案 0 :(得分:2)
在搜索了这个问题之后,我发现this SO post几分钟前已经回答了。引用:
我认为没有正确的方法 要做到这一点。方法应该只抛出 他们声明的例外,和 拦截器不应该添加新的拦截器。 我的个人案例得到了修正 我们的默认异常的错误代码 这是所有方法抛出的。
问题作者是回答并接受这个答案的同一个人,所以我猜他试图解决与你相同的问题,并得出结论认为无法完成。
答案 1 :(得分:1)
以下是一些可以尝试的事情:
1. Check that the authorize(...) method is called.
2. Try making the authorize(...) method public instead of private.
3. Check that the EJB has an annotation like this:
@Interceptors(AuthorizationInterceptor.class)