JAX-WS监视WebMethod的使用和性能



我正在使用基于令牌的AUTH构建Web服务,从SOAP标头中提取令牌。我想监视/个人资料每个WebMethod,我想知道哪个用户叫哪个WebMethod以及处理多长时间。我无法使用外部监视工具,因为我仍然需要提取令牌,因此我知道哪个用户实际上称为WebMethod。

我现在使用的是一个简单的类WebFilter,该网站窗口在每个WebMethod手动之前被调用,并且如果用户没有使用该方法的权限,则会引发异常。但是,在每种方法之前添加 long start = System.currentMillis();之类的东西,在计算时间之后,时间不是解决方案。

@WebService (serviceName = "UserService")
public class UserService implements IUserService {
@Resource
WebServiceContext wsctx;
@WebMethod
@Override
public User getUser(@WebParam(name = "name") String name) throws ServiceException {
    WebFilter.filter(wsctx.getMessageContext());
    return userManager.getUser(name);
}

我正在寻找诸如Interceptors解决方案之类的东西,我需要在每个WebMethod之前和之后都打电话给某些东西,但是Interpectors并不能真正与WebMethod一起使用,所以我对此有点拼命。

在每个监视类之前用注释解决:

@Interceptors({PerformanceInterceptor.class})

和此拦截器的隐含:

@AroundInvoke
public Object methodInterceptor(InvocationContext ctx) throws Exception {
   long start = System.currentTimeMillis();
   try {
       return ctx.proceed();
   } finally {
       long end = System.currentTimeMillis();
       System.out.println(ctx.getMethod().getName() + " took: " + (end - start) + "ms");
   }
}

相关内容

  • 没有找到相关文章

最新更新