Не удалось получить данные формы из почтового запроса причала

Я пытаюсь добавить поддержку проверки подлинности Azure AD в существующее приложение причала. Меня перенаправляют на пост-аутентификацию моего приложения с помощью Azure AD, и запрос выглядит следующим образом

Не удалось получить данные формы из почтового запроса причала

Дамп моего объекта запроса выглядит так

org.eclipse.jetty.server.Request@46b8a08d[  
   _async=org.eclipse.jetty.server.AsyncContinuation@26bb9274@DISPATCHED,
   initial,
   _asyncSupported=true,
   _attributes=   {  
      javax.servlet.request.key_size=128,
      javax.servlet.request.cipher_suite=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
      javax.servlet.request.ssl_session_id=5cAbFe3eCbFfA8Ca84A546Cb995105F012E83eD556A493E55973F5A074A91eE3
   },
   _authentication=<null>,
   _baseParameters=   {  

   },
   _characterEncoding=<null>,
   _connection=AsyncHttpConnection@b7de4c,
   g=HttpGenerator   {  
      s=0,
      h=-1,
      b=-1,
      c=-1
   },
   p=HttpParser   {  
      s=-5,
      l=5,
      c=0
   },
   r=1,
   [email protected]   {  
      /,
      null
   },
   _newContext=false,
   _contextPath=,
   _cookies=<null>,
   _cookiesExtracted=false,
   _dispatcherType=REQUEST,
   _dns=false,
   _endp=SSL NOT_HANDSHAKING i/o/u=0/0/0 ishut=false oshut=false   {  
      AsyncHttpConnection@b7de4c,
      g=HttpGenerator      {  
         s=0,
         h=-1,
         b=-1,
         c=-1
      },
      p=HttpParser      {  
         s=-5,
         l=5,
         c=0
      },
      r=1
   },
   _handled=false,
   _inputState=1,
   _method=GET,
   _parameters=   {  

   },
   _paramsExtracted=true,
   _pathInfo=<null>,
   _port=0,
   _protocol=HTTP/1.1,
   _queryEncoding=<null>,
   _queryString=<null>,
   _reader=<null>,
   _readerEncoding=<null>,
   _remoteAddr=<null>,
   _remoteHost=<null>,
   _requestAttributeListeners=<null>,
   _requestedSessionId=<null>,
   _requestedSessionIdFromCookie=false,
   _requestURI=<null>,
   _savedNewSessions=<null>,
   _scheme=https,
   _scope=org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher-142075f1,
   _serverName=<null>,
   _servletPath=/token,
   _session=<null>,
   _sessionManager=<null>,
   _timeStamp=1554775615151,
   _dispatchTime=0,
   _timeStampBuffer=<null>,
   _uri=/token,
   _multiPartInputStream=<null>
]

Я попытался перебрать заголовок и атрибуты, но получил только Connection в заголовке и javax.servlet.request.key_size, javax.servlet.request.cipher_suite, javax.servlet.request.ssl_session_id в атрибутах.

Моя трассировка вызова выглядит так

java.lang.Thread.getStackTrace(Thread.java:1559)
com.AzureADLoginService.login(AzureADLoginService.java:33)
org.eclipse.jetty.security.authentication.LoginAuthenticator.login(LoginAuthenticator.java:47)
org.eclipse.jetty.security.authentication.BasicAuthenticator.validateRequest(BasicAuthenticator.java:90)
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:492)
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1088)
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:429)
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1020)
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
org.eclipse.jetty.server.Server.handle(Server.java:370)
org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:494)
org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:971)
org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:1033)
org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:644)
org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)
org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)
org.eclipse.jetty.io.nio.SslConnection.handle(SslConnection.java:196)
org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:696)
org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:53)
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
java.lang.Thread.run(Thread.java:748)

Я написал пример приложения для сервера jettey, и я могу получить токен (код в данных формы, см. прикрепленный снимок экрана), используя request.getParameter("code"), но он не работает с моим приложением, может кто-нибудь помочь мне.

Я использую причал 8.1.15.v20140411 и не могу его обновить.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
761
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, Jetty 8 был EOL (конец жизни) с ноября 2014 года.

Теперь, чтобы посмотреть на ваше Request состояние ...

   _inputState=1,
   _method=GET,
   _parameters=   {  

   },
   _paramsExtracted=true,

Эти 4 говорят нам, что ваш запрос...

  1. был методом GET (который не соответствует спецификации, поскольку методы GET не должны иметь тело запроса).
  2. inputState at 1 говорит, что какой-то фрагмент кода использовал .getInputStream() перевод содержимого тела запроса в режим STREAM.
  3. paramsExtracted говорит, что какой-то фрагмент кода использовал один из различных .getParameter*() методов.
  4. parameters = { } означает, что не было извлечено или представлено никаких параметров ни из строки запроса запроса, ни из содержимого тела запроса.

Рекомендации ...

  • Сначала убедитесь, что вы используете соответствующий метод http для того, что вы пытаетесь выполнить, используйте POST.
  • Убедитесь, что какой-либо другой код не использовал содержимое тела запроса до вас (например, фильтр).
  • Убедитесь, что содержимое вашего тела application/x-www-form-urlencoded в порядке и без ошибок кодирования! (Jetty 8 был гораздо более снисходительным, но эта снисходительность сделала его уязвимым для многих проблем с безопасностью. Jetty 9 очень строгий)

Если вы можете отлаживать живой сценарий, установите точку останова на org.eclipse.jetty.server.Request.getParameters() и следите за тем, что он делает.

Другие вопросы по теме