0

在客户端我有以下spring bean:

<bean id="partneriLogicImpl" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
    <property name="serviceUrl" value="http://localhost:8080/hr.spi.service/hessian/lcspi/lczaj/partneri" />
    <property name="serviceInterface" value="hr.spi.logic.lcspi.lczaj.PartneriLogic" />
</bean>

我正在调用 Hessian 网络服务:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContextHessian.xml");
PartneriLogic partneriLogic = (PartneriLogic) context.getBean("partneriLogicImpl");
List<?> partnerList = partneriLogic.dohvatiSveZaExport();

这工作得很好,直到我在服务器端打开 Spring Security,之后我得到预期的错误 - “服务器返回 HTTP 响应代码:403”。

那么,如何在客户端配置用户名和密码呢?

4

2 回答 2

2

根据API Doc, org.springframework.remoting.caucho.HessianProxyFactoryBean 默认为 HTTP 基本认证提供了两个 setter 方法:

  • 设置用户名

    设置该工厂用于访问远程服务的用户名。默认为无。

    用户名将由 Hessian 通过 HTTP 基本身份验证发送。

  • 设置密码

    设置该工厂用于访问远程服务的密码。默认为无。

    密码将由 Hessian 通过 HTTP 基本身份验证发送。

如何在客户端配置用户名和密码?

在您的 applicationContext.xml 中,像这样定义您的 HessianProxyFactoryBean:

<bean id="partneriLogicImpl" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
  <property name="serviceUrl" value="http://localhost:8080/hr.spi.service/hessian/lcspi/lczaj/partneri" />
  <property name="serviceInterface" value="hr.spi.logic.lcspi.lczaj.PartneriLogic" />
  <property name="username" value="${username}" />
  <property name="password" value="${password}" />
</bean>
于 2012-08-28T03:38:10.907 回答
0

我尝试设置用户名和密码进行身份验证,但没有成功。

最后,我找到了一个解决方案——也许这是一个糟糕的解决方案。

那就是在 Hessian 服务 URL 上禁用 Spring Security。

我认为这不是一个好的解决方案,但它确实有效......

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/hessianServiceUrl");
    }
    ...
}
于 2017-01-24T19:26:10.820 回答