我有一个通过 HttpInvoker 实现的弹簧远程处理。我的客户和服务如下所示,取自 spring 文档 我遵循了 spring 文档:(抱歉,由于公司政策,我无法发布实际代码)=>spring docs
我的 httInvoker 服务受 spring security 保护,在客户端我有以下客户端代码以及 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 unauthorized。当我删除 HttpInvokerRequestExecutor 并禁用服务的拦截 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 保护,因此我想将 Security 上下文从客户端传递到服务器,以便服务器可以对其进行身份验证。ii. 测试时,如果我删除 HttpInvokerRequestExecutor 并在服务器端,我可以访问服务,我禁用拦截 URL 过滤器以访问服务。我非常感谢您在这方面的帮助。我一直在寻找解决方案 iii。请给我一些关于如何将凭据从客户端传递到服务器端的想法,以及在测试时这是否可行?