Java 首次使用[org.apache.http.client]HttpClient 4.1.1获得401未经授权

Java 首次使用[org.apache.http.client]HttpClient 4.1.1获得401未经授权,java,spring,authentication,httpclient,webservicetemplate,Java,Spring,Authentication,Httpclient,Webservicetemplate,使用凭证通过webservicetemplate向messageSender发出的第一个请求失败,401未经授权,但第二次一切正常,运行良好 class="org.springframework.ws.transport.http.HttpComponentsMessageSender"> <property name="connectionTimeout" value="900000" /> <proper

使用凭证通过webservicetemplate向messageSender发出的第一个请求失败,401未经授权,但第二次一切正常,运行良好

class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

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

 <property name="messageSender">
            <bean class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="credentials">
                    <bean class="org.apache.http.auth.UsernamePasswordCredentials">
                        <constructor-arg value="${userName}:${Password}" />
                    </bean>
                </property>
class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

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

class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

    <bean id="credentials" class="org.apache.http.auth.UsernamePasswordCredentials">
        <constructor-arg value="${userName}:${password}" />
    </bean>
class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

    <bean id="credentials" class="org.apache.http.auth.UsernamePasswordCredentials">
        <constructor-arg value="${userName}:${password}" />
    </bean>
到目前为止,我通过谷歌搜索了解到,我必须进行抢占式身份验证,以避免未经授权使用[org.apache.http.client.HttpClient]。我想要一个SpringXML配置来允许这一点,这样我就可以配置抢占式身份验证

class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

    <bean id="credentials" class="org.apache.http.auth.UsernamePasswordCredentials">
        <constructor-arg value="${userName}:${password}" />
    </bean>
此外,行为是否符合预期

class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

    <bean id="credentials" class="org.apache.http.auth.UsernamePasswordCredentials">
        <constructor-arg value="${userName}:${password}" />
    </bean>
到目前为止我都试过了

class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

    <bean id="credentials" class="org.apache.http.auth.UsernamePasswordCredentials">
        <constructor-arg value="${userName}:${password}" />
    </bean>
class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

    <bean id="credentials" class="org.apache.http.auth.UsernamePasswordCredentials">
        <constructor-arg value="${userName}:${password}" />
    </bean>
class=“org.springframework.ws.transport.http.HttpComponentsMessageSender”>
class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

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

使用凭据提供程序创建http客户端,该提供程序需要UsernamePasswordCredentials和AuthScope。AuthScope使用默认值创建,UsernamePasswordCredentials使用用户名、密码创建。BasicCredentialsProvider不接受构造函数或setter方法中的提供程序和凭据。它必须通过调用setCredentials()方法进行设置

class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

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

class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

    <bean id="credentials" class="org.apache.http.auth.UsernamePasswordCredentials">
        <constructor-arg value="${userName}:${password}" />
    </bean>
-1 xxx xxx
我必须添加到Webservicetemplate的配置如下所示:

class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

    <bean id="credentials" class="org.apache.http.auth.UsernamePasswordCredentials">
        <constructor-arg value="${userName}:${password}" />
    </bean>
   <!--  Custom Interceptor Implementation to WebServiceTemplate -->
         <property name="interceptors">
                 <list>
                        <bean class="com.utils.AddHttpHeaderInterceptor" >

                        </bean>
                </list>
            </property>      

注意:base64Creds只不过是
base64.encode(用户名:pwd)

谢谢您提供的信息。我试过了,现在连接被关闭了。从默认实现:第一次获得[401]所需的未经授权的基本身份验证,第二次进行身份验证并继续执行请求。下面是我第一次得到的:org.apache.http.impl.client.DefaultHttpClient-身份验证范围:基本“需要身份验证”@host:port我想知道如何提供基本身份验证,这样我就可以避免第一次未经授权的[401]
class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
                <property name="connectionTimeout" value="900000" />
                <property name="readTimeout" value="0" />
                <property name="httpClient" ref="httpClient" />
                <property name="credentials" ref="credentials"/>
            </bean>
        </property>



<bean id="httpClient" class="org.apache.http.client.HttpClient">
        <!-- Not Sure what configuration to add here -->
    </bean>

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