我能够在https://docs.spring.io/spring-ws/site/apidocs/org/springframework/ws/soap/security/wss4j/Wss4jSecurityInterceptor.html和https://memorynotfound.com找到解决方案/ spring-ws-username-password-authentication-wss4j /。
我只是在bean下面使用它,它开始正常工作。
@Beanpublic Wss4jSecurityInterceptor securityInterceptor() { Wss4jSecurityInterceptor security = new Wss4jSecurityInterceptor(); security.setSecurementActions('NoSecurity'); security.setSecurementPasswordType(WSConstants.PW_TEXT); return security;}解决方法
我正在使用Spring Boot v2.2.2..RELEASE and SOAP项目。
我正在将两个不同的WSDL文件加载到我的项目中。生成一个URL,http://localhost:8080/employee/employee-soap可以正常工作。但这http://localhost:8080/student/student-soap给出了以下错误。
2020-02-17 15:31:00.241警告20236-[[nio-8080-exec-5]oswsoap.server.SoapMessageDispatcher:无法处理mustUnderstand标头:{http://docs.oasis-open.org/wss /2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd }安全性。返回故障
Java代码:
@EnableWs@Configurationpublic class AppConfig extends WsConfigurerAdapter { @SuppressWarnings({ 'rawtypes','unchecked' }) @Bean public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext) {MessageDispatcherServlet servlet = new MessageDispatcherServlet();servlet.setApplicationContext(applicationContext);servlet.setTransformWsdlLocations(true);return new ServletRegistrationBean(servlet,'/*'); } @Bean public SaajSoapMessageFactory messageFactory() {SaajSoapMessageFactory messageFactory = new SaajSoapMessageFactory();messageFactory.setSoapVersion(SoapVersion.SOAP_11);messageFactory.afterPropertiesSet();return messageFactory; } @Bean('empXSD') public XsdSchema organizationSchema() {return new SimpleXsdSchema(new ClassPathResource('/xsd/employee.xsd')); } @Bean(name = 'employee') public DefaultWsdl11Definition defaultWsdl11Definition(@Qualifier('empXSD') XsdSchema schema) {DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();wsdl11Definition.setPortTypeName('employee');wsdl11Definition.setLocationUri('employee/employee-soap');wsdl11Definition.setTargetNamespace('urn:example.com:dms:wsdls:employee');wsdl11Definition.setSchema(schema);wsdl11Definition.setCreateSoap11Binding(true);return wsdl11Definition; } @Bean @Qualifier(value='stuXSD') public XsdSchema stuSchema() {return new SimpleXsdSchema(new ClassPathResource('/xsd/student.xsd')); } @Bean(name = 'student') public DefaultWsdl11Definition geographyWsdl11Definition(@Qualifier('stuXSD') XsdSchema schema) {DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();wsdl11Definition.setPortTypeName('student');wsdl11Definition.setLocationUri('student-soap');wsdl11Definition.setTargetNamespace('urn:example.com:dms:wsdls:student');wsdl11Definition.setSchema(schema);wsdl11Definition.setCreateSoap11Binding(true);return wsdl11Definition; } @Override public void addInterceptors(List<EndpointInterceptor> interceptors) {interceptors.add(new Interceptor(endpoints,req)); }}
码:
@Configurationpublic class SimpleMustUnderstandEndpointInterceptor implements SoapEndpointInterceptor{ private final String SAMPLE_NS = 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd'; @Override public boolean handleRequest(MessageContext messageContext,Object endpoint) throws Exception {return true; } @Override public boolean handleResponse(MessageContext messageContext,Object endpoint) throws Exception {return true; } @Override public boolean handleFault(MessageContext messageContext,Object endpoint) throws Exception {return true; } @Override public void afterCompletion(MessageContext messageContext,Object endpoint,Exception ex) throws Exception { } @Override public boolean understands(SoapHeaderElement header) {if(header.getName().getNamespaceURI().equalsIgnoreCase(SAMPLE_NS)) { return true;}return false; }}
根据观察,看起来甚至这个SoapEndpointInterceptor都没有调用,在此之前它只是给了错误。
在调用SOAP端点期间,下面的标头信息将会传递,并且如上所述,它给出了Fault。有指针吗?
<soapenv:Header><wsse:Security soapenv:mustUnderstand='1' xmlns:wsse='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity- secext-1.0.xsd' xmlns:wsu='http://docs.oasis-open.org/wss/2004/01/oasis-200401- wss-wssecurity-utility-1.0.xsd'><wsse:UsernameToken wsu:Id='UsernameToken- 518482F2CDC2F635FF158202815227129'><wsse:Username>aispoc_usr1</wsse:Username> <wsse:Password Type='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss- username-token-profile-1.0#PasswordText'>aispoc_usr1</wsse:Password><wsse:Nonce EncodingType='http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap- message-security-1.0#Base64Binary'>/fdGCEilz/dkVeZE05b7LQ==</wsse:Nonce>
2020-02-18T12:15:52.271Z