我有2个Spring Web应用程序,它们提供2套独立的服务。Web App 1具有使用基于用户的身份验证实现的Spring Security。
现在,Web App 2需要访问Web App 1的服务。通常,我们将使用RestTemplate类向其他Web服务发出请求。
我们如何将Web App 2的请求中的身份验证凭据传递给Web App 1
我当时处在同样的情况。这是我的解决方案。
服务器-Spring Security配置
<sec:http>
<sec:intercept-url pattern="/**" access="ROLE_USER" method="POST"/>
<sec:intercept-url pattern="/**" filters="none" method="GET"/>
<sec:http-basic />
</sec:http>
<sec:authentication-manager alias="authenticationManager">
<sec:authentication-provider>
<sec:user-service>
<sec:user name="${rest.username}" password="${rest.password}" authorities="ROLE_USER"/>
</sec:user-service>
</sec:authentication-provider>
</sec:authentication-manager>
客户端 RestTemplate 配置
<bean id="httpClient" class="org.apache.commons.httpclient.HttpClient">
<constructor-arg ref="httpClientParams"/>
<property name="state" ref="httpState"/>
</bean>
<bean id="httpState" class="CustomHttpState">
<property name="credentials" ref="credentials"/>
</bean>
<bean id="credentials" class="org.apache.commons.httpclient.UsernamePasswordCredentials">
<constructor-arg value="${rest.username}"/>
<constructor-arg value="${rest.password}"/>
</bean>
<bean id="httpClientFactory" class="org.springframework.http.client.CommonsClientHttpRequestFactory">
<constructor-arg ref="httpClient"/>
</bean>
<bean class="org.springframework.web.client.RestTemplate">
<constructor-arg ref="httpClientFactory"/>
</bean>
自定义HttpState实现
/**
* Custom implementation of {@link HttpState} with credentials property.
*
* @author banterCZ
*/
public class CustomHttpState extends HttpState {
/**
* Set credentials property.
*
* @param credentials
* @see #setCredentials(org.apache.commons.httpclient.auth.AuthScope, org.apache.commons.httpclient.Credentials)
*/
public void setCredentials(final Credentials credentials) {
super.setCredentials(AuthScope.ANY, credentials);
}
}
Maven依赖
<dependency>
<groupId>commons-httpclient</groupId>
<artifactId>commons-httpclient</artifactId>
<version>3.1</version>
</dependency>
问题内容: 我目前正在将第三方应用程序与我们的本地报告系统集成。我想使用基本身份验证来实现REST调用,但是在Spring 4.0.0中遇到了问题。我有一个简单的解决方案,效果很好: 但想通过以下方式将其重写为使用 ClientHttpRequestFactory : 此代码未编译,因为Spring 4.0.0中不再存在 CommonsClientHttpRequestFactory 类。有人知道
我目前正致力于将第三方应用程序与我们的本地报告系统集成。我想用基本身份验证实现REST调用,但在Spring4.0.0中面临一些问题。我有一个简单的解决方案,效果很好: 但希望重写此代码,以便以以下方式使用ClientHttpRequestFactory: 由于Spring4.0.0中不再存在CommonsClientHttpRequestFactory类,因此没有编译此代码。有人知道其他的解决办
我一直试图用restTemplate传递基本身份验证,但它甚至没有将身份验证头传递给服务器。下面是我使用的bean定义` `
问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe
问题内容: 我在RestTemplate中是全新的,基本上在REST API中也是如此。我想通过Jira REST API在我的应用程序中检索一些数据,但返回401未经授权。找到了有关jira rest api文档的 文章,但实际上并不知道如何将其重写为java,因为该示例使用curl的命令行方式。我将不胜感激任何建议或建议如何重写: 使用Spring Rest模板导入Java。其中ZnJlZDp
我知道关于这个主题的讨论已经存在,但我无法找到解决我的情况的答案:我想直接通过URL传递凭据(遵循https://user:pass@URL方案)。我得到一个401错误代码: 有没有比这个答案更简单的线索:使用spring restTemplate对REST API进行基本身份验证? 谢谢