【问题标题】:accessing http invoker service from a test client protected by spring security in spring remoting在 Spring 远程处理中从受 Spring Security 保护的测试客户端访问 http 调用程序服务
【发布时间】:2014-09-18 15:12:46
【问题描述】:

我有一个通过 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 未经授权 p>

public static void main(String [] args){

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

如果我错了,请纠正我,我假设我是因为 HttpInvokerRequestExecutor 而得到的。现在,当我尝试按如下方式传递用户名和密码时: 我从一个示例中获取它。我仍然收到相同的错误无法连接到 http 远程服务:401 未授权。 当我删除 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>

拦截网址是 &lt;intercept-url path="/remoting/*" access="hasRole('ROLE_ADMIN')。 现在提问: 一世。测试客户端时,如何将凭据从客户端传递到服务器?请记住,我的服务受 Spring Security 保护,因此我想将 Security 上下文从客户端传递到服务器,以便服务器可以对其进行身份验证。 ii.在测试时,如果我删除 HttpInvokerRequestExecutor 并在服务器端,我可以访问服务,我禁用拦截 URL 过滤器以访问服务。 我非常感谢您在这方面的帮助。我一直在寻找解决方案 iii.请给我一些关于如何将凭据从客户端传递到服务器端以及在测试时是否可行的想法?

【问题讨论】:

  • 你在服务器端使用什么认证方式?喜欢 HTTP Basic 吗?
  • 是spring http基本认证

标签: spring spring-security spring-remoting


【解决方案1】:

看看AuthenticationSimpleHttpInvokerRequestExecutor

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-09
    • 2015-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    • 2011-12-26
    • 1970-01-01
    相关资源
    最近更新 更多