2014-11-19 3 views
1

Привет, у меня есть исходный вид моего api из APIM и изменил его, чтобы получить заголовок htttp «Авторизация» и зарегистрировать его в файле журнала. Я добавил 2 записи в код один для insequence и один для outsequence. Вследствие этого я добавил строкуНе удалось получить http-заголовок

<property name="AuthHeader" expression="$trp:Authorization"/> 

Чтобы получить заголовок и назначить его собственности. В выездной последовательности я добавил

<log level="custom"> 
        <property name="AuthHeader value" expression="get-property('AuthHeader')"/> 
       </log> 

Чтобы определить, является ли свойство AuthHeader будет отображать и получить заголовок, однако внутри файла журнал было сказано, что

TID: [0] [AM] [2014-11-19 04:23:01,997] INFO {org.apache.synapse.mediators.builtin.LogMediator} - AuthHeader value = null {org.apache.synapse.mediators.builtin.LogMediator} 
TID: [0] [AM] [2014-11-19 04:23:07,335] INFO {org.apache.synapse.mediators.builtin.LogMediator} - AuthHeader value = null {org.apache.synapse.mediators.builtin.LogMediator} 
TID: [0] [AM] [2014-11-19 04:56:17,177] INFO {org.apache.synapse.mediators.builtin.LogMediator} - AuthHeader value = null {org.apache.synapse.mediators.builtin.LogMediator} 

Это означает, что я не получаю правильное значение HTTP-заголовка, что-то не так с кодом? Пожалуйста, помогите, полный код API ниже.

Спасибо, Дрю

<api name="admin--fte" context="/fte"> 
     <resource methods="POST GET DELETE OPTIONS PUT" url-mapping="/*"> 
      <inSequence> 
       <property name="AuthHeader" expression="$trp:Authorization"/> 
       <property name="isDefault" expression="get-property('transport', 'WSO2_AM_API_DEFAULT_VERSION')"/> 
       <filter source="get-property('isDefault')" regex="true"> 
        <then> 
         <log level="custom"> 
          <property name="STATUS" value="Faulty invoking through default API.Dropping message to avoid recursion.."/> 
         </log> 
         <payloadFactory media-type="xml"> 
          <format> 
           <am:fault xmlns:am="http://wso2.org/apimanager"> 
            <am:code>500</am:code> 
            <am:type>Status report</am:type> 
            <am:message>Internal Server Error</am:message> 
            <am:description>Faulty invoking through default API</am:description> 
           </am:fault> 
          </format> 
          <args/> 
         </payloadFactory> 
         <property name="HTTP_SC" value="500" scope="axis2"/> 
         <property name="RESPONSE" value="true"/> 
         <header name="To" action="remove"/> 
         <property name="NO_ENTITY_BODY" scope="axis2" action="remove"/> 
         <property name="ContentType" scope="axis2" action="remove"/> 
         <property name="Authorization" scope="transport" action="remove"/> 
         <property name="Host" scope="transport" action="remove"/> 
         <property name="Accept" scope="transport" action="remove"/> 
         <send/> 
        </then> 
        <else> 
         <header name="WSO2_AM_API_DEFAULT_VERSION" scope="transport" value="true"/> 
         <property name="uri.var.portnum" expression="get-property('http.nio.port')"/> 
         <send> 
          <endpoint> 
           <http uri-template="http://localhost:{uri.var.portnum}/fte/1.0"> 
            <timeout> 
             <duration>30000</duration> 
             <responseAction>fault</responseAction> 
            </timeout> 
            <suspendOnFailure> 
             <errorCodes>-1</errorCodes> 
             <initialDuration>0</initialDuration> 
             <progressionFactor>1.0</progressionFactor> 
             <maximumDuration>0</maximumDuration> 
            </suspendOnFailure> 
            <markForSuspension> 
             <errorCodes>-1</errorCodes> 
            </markForSuspension> 
           </http> 
          </endpoint> 
         </send> 
        </else> 
       </filter> 
      </inSequence> 
      <outSequence> 
       <property name="messageType" value="application/json" scope="axis2" type="STRING"/> 
       <log level="custom"> 
        <property name="AuthHeader value" expression="get-property('AuthHeader')"/> 
       </log> 
       <send/> 
      </outSequence> 
     </resource> 
     <handlers> 
      <handler class="org.wso2.carbon.apimgt.gateway.handlers.common.SynapsePropertiesHandler"/> 
     </handlers> 
    </api> 
+0

При вызове API вы отправляете заголовок авторизации точно? Пожалуйста, добавьте журнал сразу после назначения свойства AuthHeader и проверки. –

+0

Да, для команды, которую я использовал для отправки заголовка, был этот 'curl -v \ -H" Авторизация: Bearer a533cffb7d57895e377d4ab43bbe0c3 "\ -X GET \' поэтому заголовок авторизации присутствует? Это верно? (извините, новичок в этом материале) Запишет его после назначения в свойстве AuthHeader. спасибо –

ответ

2

По умолчанию, заголовок авторизации удаляется обработчик аутентификации. Вот почему вы не можете получить доступ к нему или зарегистрировать его. Обработчики действуют до посредничества inSequence.

Заголовок Authentication можно сохранить, отредактировав файл конфигурации api-manager.xml в/repository/conf. Просто раскомментируйте следующий узел и измените значение на false:

<RemoveOAuthHeadersFromOutMessage>false</RemoveOAuthHeadersFromOutMessage> 

 Смежные вопросы

  • Нет связанных вопросов^_^