我有一个通过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。请告诉我如何将凭据从客户端传递到服务器端,如果可以在测试时将其传递出去?
答案 0 :(得分:0)
看看AuthenticationSimpleHttpInvokerRequestExecutor。
(如果使用maven,则可在spring-security-remoting
依赖项中找到。)
它将从SecurityContextHolder
中选择身份验证信息。