从春季远程安全保护的测试客户端访问http调用程序服务

时间:2014-09-15 23:52:25

标签: spring spring-security spring-remoting

我有一个通过HttpInvoker实现的spring remoting。 我的客户端和服务看起来如下我从春季文档中采用的文章:(抱歉,由于公司政策,我无法发布实际代码)=>spring docs

我的httInvoker服务受Spring安全保护,在客户端,我有以下客户端代码和httpinvokerrequestexecutor,如下所示:

    <bean id="httpProxybean" class="org.springframework....HttpInvokerProxyFactoryBean>
    <property name=".." ref="executor"/>
<property name="service"...
</bean>

    <bean id="executor" class='org......HttpInvokerRequestExecutor/>

我遇到的问题是当我尝试从测试客户端测试服务时如下所示:我得到...... 无法连接到http远程服务:401未授权

public static void main(String [] args){

    Application context = new XmlPathApplicationContext("client.xml");
Service service =(Service) context.getBean("service");
}

如果我错了,请纠正我,我假设我因为HttpInvokerRequestExecutor而得到了这个。现在当我尝试传递如下的用户名和密码时:我从一个例子中得到了它。我仍然收到相同的错误无法连接到http远程服务:401 unuthorized 。  当我删除HttpInvokerRequestExecutor并禁用服务的intercept-url时,它工作正常。

public static void main(String [] args){
    final ApplicationContext context =

new ClassPathXmlApplicationContext(

"client/spring-http-client-config.xml");

String user = "bob";

String pw = "bob";

SecurityContextImpl sc = new SecurityContextImpl();

Authentication auth = new UsernamePasswordAuthenticationToken(user,

pw);



sc.setAuthentication(auth);

SecurityContextHolder.setContext(sc);


    Service service =(Service) context.getBean("service");
    }

安全配置xml配置用于测试目的是

<authenticationManager>
.....................
<user username="bob" password="bob" authorities ="ROLE_ADMIN">
..........................
</authenticationManager>

和截取网址是 <intercept-url path="/remoting/*" access="hasRole('ROLE_ADMIN')。 现在问题: 一世。在测试客户端时,如何将凭据从客户端传递到服务器?请记住,我的服务受Spring安全保护,所以我想将Security上下文从客户端传递给服务器,以便服务器可以对其进行身份验证。 II。测试时我可以访问服务,如果我删除HttpInvokerRequestExecutor并在服务器端,我禁用intercept-url过滤器来访问服务。 我非常感谢你对此的帮助。我一直在寻找解决方案 III。请告诉我如何将凭据从客户端传递到服务器端,如果可以在测试时将其传递出去?

1 个答案:

答案 0 :(得分:0)

看看AuthenticationSimpleHttpInvokerRequestExecutor

(如果使用maven,则可在spring-security-remoting依赖项中找到。)

它将从SecurityContextHolder中选择身份验证信息。