JBoss と Resteasy を使用して Web サービスを実装しています。要件の 1 つは、処理を開始する前に、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
}
}