在Spring中使用Hessian远程处理的客户端基本HTTP身份验证

时间:2012-08-27 14:47:57

标签: java spring spring-security hessian spring-remoting

在客户端,我有以下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 Web服务:

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

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

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

2 个答案:

答案 0 :(得分:2)

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

  • setUsername

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

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

  • setPassword

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

    密码将由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>

答案 1 :(得分:0)

我尝试设置用于身份验证的用户名和密码,但它无效。

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

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

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

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/hessianServiceUrl");
    }
    ...
}