JAX-WS Monitor WebMethod的用法和性能

问题描述 投票:0回答:1

我正在使用基于令牌的身份验证构建WebService,从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);
}

我正在寻找像拦截器解决方案之类的东西,我需要在每个WebMethod之前和之后调用一些东西,但拦截器并不真正使用WebMethods所以我有点绝望。

java web-services monitoring
1个回答
0
投票

在每个受监控的类之前解决注释:

@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");
   }
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.