虽然我的项目是Java Web应用程序,但我仅将Web服务用作客户端。我使用Apache Axis2成功创建了存根,并使用SoapUI对其进行了测试。现在是实现安全性的时候了。 This is我必须集成的服务之一。它附带了WS-Security策略,因此我必须正确传输我的凭证。我想将Apache Rampart集成到我的项目中。我发现下载所需的JAR和MAR文件时遇到很多困难,但是我做到了。现在,我具有以下项目结构:webapp -- WEB-INF -- classes -- conf -- axis2.xml -- modules -- several -mar files -- rampart-1.6.2.mar -- modules.list -- spring -- various context files -- web.xml我使用Spring初始化所有的bean,包括Web服务存根。如果我让Spring正常实例化它们,它们将按预期工作。但是,当我使用BeanPostProcessor接合城墙模块时,它将失败Caused by: org.apache.axis2.AxisFault: Unable to engage module : rampartat org.apache.axis2.client.ServiceClient.engageModule(ServiceClient.java:363)at it.csttech.edwin.security.SecurityHandler.engage(SecurityHandler.java:52)在我的axis2.xml中,在<module ref="rampart" />之后添加了addressing我使用以下代码启用Rampart: RampartConfig rc = new RampartConfig(); rc.setUser(user); Policy policy = PolicyEngine.getPolicy(new StAXOMBuilder(policyStream).getDocumentElement()); //XML policy file in classpath policy.addAssertion(rc); serviceClient.engageModule("rampart"); //this fails Options options = serviceClient.getOptions(); options.setProperty(WSHandlerConstants.PW_CALLBACK_REF, callbackHandler); //This will provide password options.setProperty(RampartMessageData.KEY_RAMPART_POLICY, policy); //This will provide policy我发现如果我Map<String, AxisModule> modules = serviceClient.getAxisConfiguration().getModules();我只会得到一张空地图!!!!因此,根本不会加载任何模块。然后,我尝试将modules /目录移动到硬盘驱动器上的另一个位置,并通过系统属性axis2.repo进行链接,但是即使我故意设置了错误的路径,即使Axis2不会加载,也不会加载文件,地图将仍然为空。我快疯了。我不知道如何正确地将Rampart加载到我的设置中。我什至不知道Spring IoC是否可用于注入适当的配置和/或让Rampart参与所有服务。 (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 您可以尝试创建ConfigurationContext并使用它获取ServiceClient。// create configuration contextConfigurationContext ctx = ConfigurationContextFactory.createConfigurationContextFromFileSystem(RESOURCES_DIR, null);// create service clientServiceClient serClient = new ServiceClient(ctx, null);// engage modulesserClient.engageModule("rampart");“ RESOURCES_DIR”应指向.mar文件的位置。 (adsbygoogle = window.adsbygoogle || []).push({});
10-01 08:39