Рассмотрим этот простой пример:
@Stateless
@WebService
public class AccountService {
@WebMethod
@RolesAllowed("CUSTOMER")
public void replenishBalance(double amount) {
//
}
@WebMethod
@RolesAllowed("BOSS")
public void emptyBankAccounts() {
//
}
}
Если авторизация роли не удалась, контейнер EJB сгенерирует EJBAccessException
без ввода любого из этих методов. Исключение будет заключено в стек веб-службы, в результате чего будет получено что-то вроде "javax.ejb.EJBAccessException: клиент, не авторизованный для этого вызова" , будет отображаться в трассировке стека потребителя.
Тем не менее, эти два бизнес-метода (по крайней мере, первый), неправильный вызов их также является бизнес-кейсом, и я ожидаю, что смогу заставить их выбросить объявленное исключение @WebFault
, так что потребитель веб-сервиса сможет обрабатывать исключения безопасности тоже.
Это возможно?
PS: работает Glassfish 3.1.2, стек Metro WS