2

私はSpring 3,2を使用するアプリケーションで作業しており、基本認証のみを必要とする残りのAPIからデータを消費しています...問題は、APIにログインできないことです.401しか得られません.

構成は次のとおりです。

まず、資格情報プロバイダー

<bean id="credentialProvider" class="org.apache.http.impl.client.BasicCredentialsProvider" />

Restful サービスにアクセスするための認可スコープ。このテンプレートをすべてに使用したいので、デフォルトで設定しています

<bean id="authScope" class="org.apache.http.auth.AuthScope">
  <constructor-arg name="host"> <null /> </constructor-arg>
  <constructor-arg name="port"> <value>-1</value> </constructor-arg>
  <constructor-arg name="realm"> <null /> </constructor-arg>
  <constructor-arg name="scheme"> <null /> </constructor-arg>
</bean>

API サービスにアクセスするためのユーザー名とパスワードの資格情報

<bean id="credentials" class="org.apache.http.auth.UsernamePasswordCredentials">
  <constructor-arg name="userName" value="${dataApi.username}"></constructor-arg>
  <constructor-arg name="password" value="${dataApi.password}"></constructor-arg>
</bean>

資格情報プロバイダーの作成

<bean id="methodInvoke" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
  <property name="targetObject" ref="credentialProvider" />
  <property name="targetMethod" value="setCredentials" />
  <property name="arguments">
    <list>
      <ref local="authScope" />
      <ref local="credentials" />
    </list>
  </property>
</bean>

プロキシを使用する必要があるため...

<bean id="proxyHttpClient" class="com.cibbva.commerce360.utils.ProxyHttpClient">
  <constructor-arg name="host" value="${proxy.hostname}" />
  <constructor-arg name="port" value="${proxy.port}" />
  <constructor-arg name="user" value="${proxy.username}" />
  <constructor-arg name="pass" value="${proxy.password}" />
  <constructor-arg name="conman" ref="clientConnectionManager"></constructor-arg>
  <property name="credentialsProvider" ref="credentialProvider" />
</bean>

次のように定義されている clientConnectionManager:

<bean id="clientConnectionManager" class="org.apache.http.impl.conn.PoolingClientConnectionManager">
  <property name="defaultMaxPerRoute" value="${dataAPi.connection.maxPerRoute}"></property>
  <property name="maxTotal" value="${dataAPi.connection.maxTotal}"></property>
</bean>

そして最後に requestFactory と restTemplate:

<bean id="requestFactory" class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
  <constructor-arg ref="proxyHttpClient" />
</bean>

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate">
  <constructor-arg name="requestFactory" ref="requestFactory" />
</bean>

問題は、Authorization パラメーターがリクエストのヘッダーに追加されていないためだと思います。デバッグ モードで見ると、次のように表示されます。

DEBUG org.apache.http.headers - >> GET /xxxx/xxxxxx?xxxx HTTP/1.1
DEBUG org.apache.http.headers - >> Accept: application/json, application/*+json
DEBUG org.apache.http.headers - >> Host: hostname
DEBUG org.apache.http.headers - >> Connection: Keep-Alive
DEBUG org.apache.http.headers - >> User-Agent: Apache-HttpClient/4.2.3 (java 1.5)
DEBUG org.apache.http.wire - << "HTTP/1.1 401 No Autorizado[\r][\n]"

ご覧のとおり、ヘッダーには認証情報がありません。ユーザー名とパスワードが間違っている可能性を排除するために、curl を使用して同じ要求を行います。

curl -v --user 'username:pasword' https://xxxx/xxxxxx?xxxx

出力は次のとおりです。

SSL certificate verify ok.
Server auth using Basic with user 'user'
GET xxxx/xxxxxx?xxxx HTTP/1.1
Authorization: Basic Y29tL....
User-Agent: curl/7.29.0
Host: hostname
Accept: */*
HTTP/1.1 404 No Encontrado

Authorization要約すると、リクエストのヘッダーにパラメータを追加するにはどうすればよいですか?

どうもありがとう!

4

1 に答える 1