Я пытаюсь отфильтровать (javax.servlet.Filter) все входящие запросы SOAP во всех концах моих веб-сервисов. Эти веб-сервисы создаются из @Stateless EJB и используя Message Authentication over SSL
Фильтр для @Stateless @Webservice
Мои веб-сервисы прокомментированы как
@WebService
@Stateless
public class WebServiceA {
@EJB
private MyEJB ejbRef;
...
public Result getMethodA()...
}
У меня есть пользовательский фильтр, который существует в моем lib/
директории GlassFish и внутри config/default-web.xml
у меня есть фильтр сопоставлен <url-patter>/*</url-pattern>
public final class MyFilter implements Filter {
@Override
public void init()...
@Override
public void destroy()...
@Override
public void doFilter(...) {
...
System.out.println("Got to Filter");
...
}
}
фильтр вызывается на каждом запросе я делаю к применению для моих конечных точек SOAP, за исключением. Фильтр попадает в admin console
, фильтр попадает в файлы -war
, фильтр попадает при переходе на undeployed EAR
... в основном все, кроме развернутой конечной точки SOAP (никогда не попадает в конечную точку .
Я также попытался реализации SOAPHandler
но, к сожалению это обрабатывается после методы аутентификации элементы контейнера вызываются (JAAS)
, и я должен изменить заголовок SOAP до контекста авторизации.
Я смотрел на эту ссылку Is it possible to define a servlet filter for a stateless ejb webservice, on GlassFish 3.1 но @RequestScoped
не работает @Stateless
, который требуется на @WebService
, который отличается от ejb-jar
* Редактировать Я попробовал EJBInterceptors и так же, как SOAPHandler, перехватчик вызывается после безопасности, управляемой контейнером.
Спасибо за любую помощь
Спасибо, это звучит многообещающе. Я попытаюсь привести пример, и если это произойдет, я соглашусь. –
Перехватчик вызывался, но только после того, как был вызван JAAS, мне это нужно раньше. Возможно, есть способ определить приоритет/порядок? –
Он вызывается в том порядке, в котором вы перечисляете их в @ перехватчиках –