Hi All

The following code gets the client IP address using reflection. Not very pretty, but it works fine unless you install a security manager. It will also break if the Jetspeed implementation undergoes a major revision. But for now, in the absence of anything more elegant, it works.

public static void printRemoteAddr(RenderRequest request) {
 try {
String remoteAddr = (String) findField(request, "requestContext.servletRequest.request.request.remoteAddr");
    System.out.println("Remote addr: " + remoteAddr);
 } catch (Exception e) {
    e.printStackTrace();
 }
}

/**
* Find the value of a field that you normally do not have access to using reflection.
 * The field may have a protected, package or private access modifier.
 *
 * @param obj The object instance to start with
 * @param fieldName The name of the field in "request.remoteAddr" format
 * @return The field value
 * @throws IllegalArgumentException Field does not exist
 * @throws IllegalAccessException Security manager threw you out
 */
public static Object findField(Object obj, String fieldName)
 throws IllegalArgumentException, IllegalAccessException {
   // Step through the path to the field
  String[] tokens = fieldName.split("\\.");
   for (String token : tokens) {
      // Iterate up the inheritance hierarchy
      boolean found = false;
      Class<?> clazz = obj.getClass();
      while (clazz != null && !found) {
      try {
         Field field = clazz.getDeclaredField(token);
         found = true;
         field.setAccessible(true);
         obj = field.get(obj);
     } catch (NoSuchFieldException nsfex) {
       clazz = clazz.getSuperclass();
     }
   }
   if (!found)
throw new IllegalArgumentException(token + " is not a field in class " + obj.getClass().getName());
 }
  return obj;
}



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-user-unsubscr...@portals.apache.org
For additional commands, e-mail: jetspeed-user-h...@portals.apache.org

Reply via email to