javassist, получите второй параметр метода doGet

1

я вставляю свой код в метод doGet

val replace = "" +
  "  System.out.println(\"[before] " + className + "\");" +
  "  $proceed($$);" +
  "  try{System.out.println(\"$args[2] = \" + $args[1].toString());}catch(Exception ex){System.out.println(\"ERROR\");}"
  "  System.out.println(\"[after] " + className  + "\");".stripMargin

Здесь я получаю второй параметр, и я ожидаю, что param будет экземпляром класса HttpServletResponse, но я вижу следующий класс

org.springframework.security.web.context
.HttpSessionSecurityContextRepository$SaveToSessionResponseWrapper@398ce9f7 

За действиями находится DefaultServlet, FrameworkServlet

Что не так с моей реальностью?

  • 0
    Это экземпляр HttpServletResponse очень специфического подкласса, но, тем не менее, это экземпляр.
Теги:
spring
javassist

1 ответ

1
Лучший ответ

HttpServletResponse - это интерфейс, поэтому там может быть что-то, что правильно вводит данный интерфейс. Поскольку вы весной, инфраструктура использует свою собственную реализацию, как вы можете видеть из .toString mehotd, это класс SaveToSessionResponseWrapper.

Во второй ссылке вы можете найти точное место, где есть замена:

SaveToSessionResponseWrapper wrappedResponse =
  new SaveToSessionResponseWrapper(response, request, httpSession != null, context);
requestResponseHolder.setResponse(wrappedResponse);

Дополнительную информацию об этом классе вы можете найти здесь:

Реализация HttpSessionSecurityContextRepository

Ещё вопросы

Сообщество Overcoder
Наверх
Меню