当前位置: 首页 > 面试题库 >

使用RestTemplate的Spring Security身份验证

微生嘉
2023-03-14
问题内容

我有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进行基本身份验证? 谢谢