【问题标题】:Spring: configure a static field singleton instanceSpring:配置静态字段单例实例
【发布时间】:2014-02-24 07:56:14
【问题描述】:

有 CXF 的 PolicyBasedWSS4JInInterceptor 创建单例实例:

public static final PolicyBasedWSS4JInInterceptor INSTANCE 
    = new PolicyBasedWSS4JInInterceptor();

没有 Spring 技能我正在努力解决如何通过 cxf.xml 文件中的 Spring bean 定义设置其 acestor (AbstractWSS4JInterceptor) 属性映射。基本上我想在 cxf.xml 中配置 WSS 相关的属性,例如“signaturePropFile”。

有人可以展示如何设置 PolicyBasedWSS4JInInterceptor.INSTANCE 的属性映射吗?谢谢!

【问题讨论】:

    标签: java spring cxf wss4j


    【解决方案1】:

    我会声明一个单例 bean:

    <bean id="interceptor" class="whatever.your.package.PolicyBasedWSS4JInInterceptor" scope="singleton"/>
    

    然后在我需要的地方注入它

    <bean id="anotherBean" ...>
      <property name="interceptor" ref="interceptor"/>
    </bean>
    

    这个其他 bean 将具有像这样的普通 PolicyBasedWSS4JInInterceptor 属性:

    private PolicyBasedWSS4JInInterceptor interceptor;
    
    public PolicyBasedWSS4JInInterceptor getInterceptor() {
      return interceptor;
    }
    
    public void setPolicyBasedWSS4JInInterceptor(PolicyBasedWSS4JInInterceptor interceptor) {
      this.interceptor = interceptor;
    }
    

    你会得到与声明它相同的结果,用 Spring 术语表示。这取决于您喜欢哪种方式,只需记住以 Spring 方式执行此操作,您将拦截器放在 IoC 容器中,因此您可以在必要时对其进行检测,等等。

    【讨论】:

    • bean 声明会创建另一个 PolicyBasedWSS4JInInterceptor 实例,对吧?我认为这不起作用,因为 WSSecurityInterceptorProvider 使用 INSTANCE 将其添加到 CXF 的拦截器链中,如下所示:this.getOutInterceptors().add(PolicyBasedWSS4JOutInterceptor.INSTANCE);
    • 非常抱歉,我没有意识到您的拦截器是库的一部分,因此您不维护该代码,我完全错了,非常抱歉。我根本没听懂你的问题。
    【解决方案2】:

    基于“action”的 WS-Security 属性(例如“signaturePropFile”)不适用于 CXF 中基于 WS-SecurityPolicy 的拦截器。 CXF 具有单独的配置标记,您可以在使用 WS-SecurityPolicy 时将它们作为 JAX-WS 属性传递,因此您不需要访问 INSTANCE 类的任何属性。请参阅此处了解更多信息:

    http://cxf.apache.org/docs/ws-securitypolicy.html

    科尔姆。

    【讨论】:

      猜你喜欢
      • 2015-08-28
      • 1970-01-01
      • 2012-04-15
      • 1970-01-01
      • 2014-09-16
      • 2013-02-10
      • 1970-01-01
      • 2015-02-12
      相关资源
      最近更新 更多