я вставляю свой код в метод 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
Что не так с моей реальностью?
HttpServletResponse
- это интерфейс, поэтому там может быть что-то, что правильно вводит данный интерфейс. Поскольку вы весной, инфраструктура использует свою собственную реализацию, как вы можете видеть из .toString
mehotd, это класс SaveToSessionResponseWrapper
.
Во второй ссылке вы можете найти точное место, где есть замена:
SaveToSessionResponseWrapper wrappedResponse =
new SaveToSessionResponseWrapper(response, request, httpSession != null, context);
requestResponseHolder.setResponse(wrappedResponse);
Дополнительную информацию об этом классе вы можете найти здесь:
HttpServletResponse
очень специфического подкласса, но, тем не менее, это экземпляр.