我们使用 JBoss 和 Resteasy 来实现 Web 服务,其中一个要求是我们在处理开始之前记录传递给 Web 服务的参数和属性。PreProcessInterceptor 非常适合这个。我让它正常工作并记录请求参数,但一些信息将作为属性传递,我不知道如何访问它们。
下面是我用来记录请求参数的代码;谁能告诉我如何获得属性?
@Provider
@ServerInterceptor
public class ParameterLoggingInterceptor implements PreProcessInterceptor {
@Inject
private Logger logger;
@Override
public ServerResponse preProcess(HttpRequest request, ResourceMethod method) throws UnauthorizedException {
StringBuilder sb = new StringBuilder();
MultivaluedMap<String, String> mMap = request.getUri().getQueryParameters();
Set<String> keys = mMap.keySet();
int mapSize = keys.size();
if (mapSize > 0) {
sb.append("Incoming parameters: ");
int processedParams = 1;
for (String key : keys) {
sb.append(key).append("=");
sb.append(mMap.get(key));
if (processedParams < mapSize) {
sb.append(", ");
}
processedParams++;
}
logger.debug(sb.toString());
}
return null;
}
编辑添加以下内容以响应 Eiden 的回答:
谢谢,艾登。我只是试了一下。你的意思是像下面这样吗?如果是这样,它似乎不起作用(如果不是,请澄清)。attributeName 提供的是:“org.jboss.weld.context.AbstractConversationContext”,attributeValue 是一样的。这与我在使用 org.jboss.resteasy.spi.HttpRequest 对象时得到的结果相同。
@Provider
@ServerInterceptor
public class ParameterLoggingInterceptor implements PreProcessInterceptor {
@Context HttpServletRequest servletRequest;
@Inject
private Logger logger;
@Override
public ServerResponse preProcess(HttpRequest request, ResourceMethod method) throws UnauthorizedException {
Enumeration<String> attributeNames = servletRequest.getAttributeNames();
StringBuilder sb = new StringBuilder();
while (attributeNames.hasMoreElements()) {
String attributeName = (String) attributeNames.nextElement();
String attributeValue = (String) servletRequest.getAttribute(attributeName);
// Do something with attributeValue and attributeName
}
}