考虑这个简单的例子:
@Stateless
@WebService
public class AccountService {
@WebMethod
@RolesAllowed("CUSTOMER")
public void replenishBalance(double amount) {
//
}
@WebMethod
@RolesAllowed("BOSS")
public void emptyBankAccounts() {
//
}
}
如果角色授权失败,EJB容器将抛出EJBAccessException
而不输入任何这些方法。异常将被webservice堆栈包装,最终导致一种“javax.ejb.EJBAccessException:未授权此客户调用的客户端”显示在消费者的堆栈跟踪中。
然而这两个是业务方法(至少是第一个),错误地调用它们也是一个商业案例,我希望能够让它们抛出声明的@WebFault
异常,这样web服务的消费者就会能够处理安全异常。
这可能吗?
PS:运行Glassfish 3.1.2,Metro WS Stack