gpt4 book ai didi

java - 过滤@Stateless @Webservice

转载 作者:行者123 更新时间:2023-11-29 04:44:11 26 4
gpt4 key购买 nike

我正在尝试过滤 (javax.servlet.Filter) 我所有 Web 服务端点上的所有传入 SOAP 请求。这些 Web 服务是从 @Stateless EJB 创建的并使用 Message Authentication over SSL

我的网络服务被注释为

@WebService
@Stateless
public class WebServiceA {
@EJB
private MyEJB ejbRef;
...
public Result getMethodA()...
}

我的 Glassfish 中有一个自定义过滤器 lib/目录及内部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 端点之外的所有内容(从未命中我的 WebServiceA -> getMethodA() 端点。

我还尝试实现 SOAPHandler但遗憾的是,这是在调用容器的身份验证方法之后处理的 (JAAS) ,并且我必须在登录上下文之前更改 SOAP header 。

我看过这个链接 Is it possible to define a servlet filter for a stateless ejb webservice, on GlassFish 3.1但是@RequestScoped不适用于 @Stateless这是 @WebService 所必需的那是 ejb-jar 的一部分

*编辑我试过 EJBInterceptors,就像 SOAPHandler 一样,拦截器在容器管理的安全性之后调用。

感谢您的帮助

最佳答案

过滤器与 servlet 技术一起使用。将它们与 EJB/JAX WS 一起使用不会拦截请求。

您应该使用 EJB 拦截器,它的作用与过滤器完全相同。

这是一个示例。

public class MyEJBInterceptor {

@AroundInvoke
public Object invoke(InvocationContext context) throws Exception {

//Your code goes here
}

要使用这个拦截器:

@Stateless
@Interceptors({MyEJBInterceptor.class})
public class MyBean implements MyBeanLocal {

enter code here

}

关于java - 过滤@Stateless @Webservice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37952005/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com