Repository: cxf Updated Branches: refs/heads/3.1.x-fixes 4522944d5 -> 2f01683b4
[CXF-7365] Dropping a singlePartOnly restriction, and instead optionally bufferring the payload on the receiving end per the initial feedback Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/2f01683b Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/2f01683b Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/2f01683b Branch: refs/heads/3.1.x-fixes Commit: 2f01683b417b0429bcc49cefec917d3e99ce8979 Parents: 4522944 Author: Sergey Beryozkin <[email protected]> Authored: Mon May 15 12:06:06 2017 +0100 Committer: Sergey Beryozkin <[email protected]> Committed: Mon May 15 12:08:12 2017 +0100 ---------------------------------------------------------------------- .../AbstractJwsMultipartSignatureFilter.java | 10 --- .../AbstractJwsMultipartVerificationFilter.java | 14 ++-- .../JwsMultipartSignatureInFilter.java | 24 +++++-- .../systest/jaxrs/security/jose/BookStore.java | 9 +++ .../jose/jwejws/JAXRSJwsMultipartTest.java | 74 +++++++++----------- .../security/jose/jwejws/serverMultipart.xml | 33 +++++---- 6 files changed, 88 insertions(+), 76 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/2f01683b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartSignatureFilter.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartSignatureFilter.java b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartSignatureFilter.java index 971e6ea..2e66ae5 100644 --- a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartSignatureFilter.java +++ b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartSignatureFilter.java @@ -21,8 +21,6 @@ package org.apache.cxf.rs.security.jose.jaxrs.multipart; import java.util.ArrayList; import java.util.List; -import javax.ws.rs.ProcessingException; - import org.apache.cxf.common.util.Base64UrlUtility; import org.apache.cxf.common.util.StringUtils; import org.apache.cxf.helpers.CastUtils; @@ -41,7 +39,6 @@ public abstract class AbstractJwsMultipartSignatureFilter { private JsonMapObjectReaderWriter writer = new JsonMapObjectReaderWriter(); private JwsSignatureProvider sigProvider; - private boolean supportSinglePartOnly = true; private boolean useJwsJsonSignatureFormat; public void setSignatureProvider(JwsSignatureProvider signatureProvider) { @@ -62,9 +59,6 @@ public abstract class AbstractJwsMultipartSignatureFilter { parts.add(rootEntity); } } - if (supportSinglePartOnly && parts.size() > 1) { - throw new ProcessingException("Single part only is supported"); - } JwsHeaders headers = new JwsHeaders(); headers.setPayloadEncodingStatus(false); @@ -88,10 +82,6 @@ public abstract class AbstractJwsMultipartSignatureFilter { return parts; } - public void setSupportSinglePartOnly(boolean supportSinglePartOnly) { - this.supportSinglePartOnly = supportSinglePartOnly; - } - public void setUseJwsJsonSignatureFormat(boolean useJwsJsonSignatureFormat) { this.useJwsJsonSignatureFormat = useJwsJsonSignatureFormat; } http://git-wip-us.apache.org/repos/asf/cxf/blob/2f01683b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartVerificationFilter.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartVerificationFilter.java b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartVerificationFilter.java index 126cd8f..7a404c5 100644 --- a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartVerificationFilter.java +++ b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/AbstractJwsMultipartVerificationFilter.java @@ -29,22 +29,18 @@ import org.apache.cxf.rs.security.jose.jws.JwsSignatureVerifier; public abstract class AbstractJwsMultipartVerificationFilter { private JwsSignatureVerifier sigVerifier; - private boolean supportSinglePartOnly = true; private boolean useJwsJsonSignatureFormat; - + private boolean bufferPayload; public void setSigVerifier(JwsSignatureVerifier sigVerifier) { this.sigVerifier = sigVerifier; } - public void setSupportSinglePartOnly(boolean supportSinglePartOnly) { - this.supportSinglePartOnly = supportSinglePartOnly; - } - + protected void addMultipartFilterIfNeeded(MediaType contentType) { if (contentType != null && contentType.getType().equals("multipart")) { Message m = JAXRSUtils.getCurrentMessage(); MultipartInputFilter jwsFilter = new JwsMultipartSignatureInFilter(m, sigVerifier, - supportSinglePartOnly, + bufferPayload, useJwsJsonSignatureFormat); AttachmentUtils.addMultipartInFilter(jwsFilter); } @@ -54,4 +50,8 @@ public abstract class AbstractJwsMultipartVerificationFilter { public void setUseJwsJsonSignatureFormat(boolean useJwsJsonSignatureFormat) { this.useJwsJsonSignatureFormat = useJwsJsonSignatureFormat; } + + public void setBufferPayload(boolean bufferPayload) { + this.bufferPayload = bufferPayload; + } } http://git-wip-us.apache.org/repos/asf/cxf/blob/2f01683b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/JwsMultipartSignatureInFilter.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/JwsMultipartSignatureInFilter.java b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/JwsMultipartSignatureInFilter.java index 697553e..e0a306d 100644 --- a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/JwsMultipartSignatureInFilter.java +++ b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/multipart/JwsMultipartSignatureInFilter.java @@ -26,6 +26,7 @@ import java.util.Properties; import org.apache.cxf.common.util.StringUtils; import org.apache.cxf.helpers.IOUtils; +import org.apache.cxf.io.CachedOutputStream; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.jaxrs.ext.multipart.MultipartInputFilter; import org.apache.cxf.jaxrs.json.basic.JsonMapObjectReaderWriter; @@ -43,22 +44,22 @@ import org.apache.cxf.rs.security.jose.jws.JwsVerificationSignature; public class JwsMultipartSignatureInFilter implements MultipartInputFilter { private JsonMapObjectReaderWriter reader = new JsonMapObjectReaderWriter(); private JwsSignatureVerifier verifier; - private boolean supportSinglePartOnly; + private boolean bufferPayload; private Message message; private boolean useJwsJsonSignatureFormat; public JwsMultipartSignatureInFilter(Message message, JwsSignatureVerifier verifier, - boolean supportSinglePartOnly, + boolean bufferPayload, boolean useJwsJsonSignatureFormat) { this.message = message; this.verifier = verifier; - this.supportSinglePartOnly = supportSinglePartOnly; + this.bufferPayload = bufferPayload; this.useJwsJsonSignatureFormat = useJwsJsonSignatureFormat; } @Override public void filter(List<Attachment> atts) { - if (atts.size() < 2 || supportSinglePartOnly && atts.size() > 2) { + if (atts.size() < 2) { throw ExceptionUtils.toBadRequestException(null, null); } Attachment sigPart = atts.remove(atts.size() - 1); @@ -128,7 +129,20 @@ public class JwsMultipartSignatureInFilter implements MultipartInputFilter { } boolean verifyOnLastRead = i == attSize - 1 ? true : false; JwsInputStream jwsStream = new JwsInputStream(dataPartStream, sig, signatureBytes, verifyOnLastRead); - Attachment newDataPart = new Attachment(jwsStream, dataPart.getHeaders()); + + InputStream newStream = null; + if (bufferPayload) { + CachedOutputStream cos = new CachedOutputStream(); + try { + IOUtils.copy(jwsStream, cos); + newStream = cos.getInputStream(); + } catch (Exception ex) { + throw ExceptionUtils.toBadRequestException(ex, null); + } + } else { + newStream = jwsStream; + } + Attachment newDataPart = new Attachment(newStream, dataPart.getHeaders()); atts.add(i, newDataPart); } } http://git-wip-us.apache.org/repos/asf/cxf/blob/2f01683b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/BookStore.java ---------------------------------------------------------------------- diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/BookStore.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/BookStore.java index e774c77..5d140ec 100644 --- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/BookStore.java +++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/BookStore.java @@ -23,6 +23,7 @@ package org.apache.cxf.systest.jaxrs.security.jose; import java.util.List; import javax.ws.rs.Consumes; +import javax.ws.rs.InternalServerErrorException; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; @@ -69,6 +70,14 @@ public class BookStore { return book; } @POST + @Path("/books") + @Produces("multipart/related") + @Consumes("multipart/related") + @Multipart(type = "application/xml") + public Book echoBookMultipartModified(@Multipart(type = "application/xml") Book book) { + throw new InternalServerErrorException("Failure to detect the payload has been modified"); + } + @POST @Path("/booksList") @Produces("multipart/related") @Consumes("multipart/related") http://git-wip-us.apache.org/repos/asf/cxf/blob/2f01683b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsMultipartTest.java ---------------------------------------------------------------------- diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsMultipartTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsMultipartTest.java index ec7ffbc..b874d10 100644 --- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsMultipartTest.java +++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsMultipartTest.java @@ -25,8 +25,6 @@ import java.util.LinkedList; import java.util.List; import javax.ws.rs.BadRequestException; -import javax.ws.rs.ProcessingException; -import javax.ws.rs.WebApplicationException; import org.apache.cxf.Bus; import org.apache.cxf.bus.spring.SpringBusFactory; @@ -64,7 +62,16 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { @Test public void testJwsJwkBookHMacMultipart() throws Exception { - String address = "https://localhost:" + PORT + "/jwsjwkhmacSinglePart"; + String address = "https://localhost:" + PORT + "/jwsjwkhmac"; + BookStore bs = createJwsBookStoreHMac(address, false, false); + Book book = bs.echoBookMultipart(new Book("book", 123L)); + assertEquals("book", book.getName()); + assertEquals(123L, book.getId()); + } + + @Test + public void testJwsJwkBookHMacMultipartBuffered() throws Exception { + String address = "https://localhost:" + PORT + "/jwsjwkhmac"; BookStore bs = createJwsBookStoreHMac(address, true, false); Book book = bs.echoBookMultipart(new Book("book", 123L)); assertEquals("book", book.getName()); @@ -73,8 +80,8 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { @Test public void testJwsJwkBookHMacMultipartJwsJson() throws Exception { - String address = "https://localhost:" + PORT + "/jwsjwkhmacSinglePartJwsJson"; - BookStore bs = createJwsBookStoreHMac(address, true, true); + String address = "https://localhost:" + PORT + "/jwsjwkhmacJwsJson"; + BookStore bs = createJwsBookStoreHMac(address, false, true); Book book = bs.echoBookMultipart(new Book("book", 123L)); assertEquals("book", book.getName()); assertEquals(123L, book.getId()); @@ -82,8 +89,8 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { @Test public void testJwsJwkBookRSAMultipart() throws Exception { - String address = "https://localhost:" + PORT + "/jwsjwkrsaSinglePart"; - BookStore bs = createJwsBookStoreRSA(address, true); + String address = "https://localhost:" + PORT + "/jwsjwkrsa"; + BookStore bs = createJwsBookStoreRSA(address); Book book = bs.echoBookMultipart(new Book("book", 123L)); assertEquals("book", book.getName()); assertEquals(123L, book.getId()); @@ -91,7 +98,7 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { @Test public void testJwsJwkBooksHMacMultipart() throws Exception { - String address = "https://localhost:" + PORT + "/jwsjwkhmacManyParts"; + String address = "https://localhost:" + PORT + "/jwsjwkhmac"; BookStore bs = createJwsBookStoreHMac(address, false, false); List<Book> books = new LinkedList<Book>(); books.add(new Book("book", 123L)); @@ -102,60 +109,44 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { assertEquals("book2", returnBooks.get(1).getName()); assertEquals(124L, returnBooks.get(1).getId()); } - @Test(expected = ProcessingException.class) - public void testJwsJwkBooksHMacMultipartClientRestriction() throws Exception { - String address = "https://localhost:" + PORT + "/jwsjwkhmacManyParts"; - BookStore bs = createJwsBookStoreHMac(address, true, false); - List<Book> books = new LinkedList<Book>(); - books.add(new Book("book", 123L)); - books.add(new Book("book2", 124L)); - bs.echoBooksMultipart(books); - } - @Test(expected = BadRequestException.class) - public void testJwsJwkBooksHMacMultipartServerRestriction() throws Exception { - String address = "https://localhost:" + PORT + "/jwsjwkhmacSinglePart"; - BookStore bs = createJwsBookStoreHMac(address, false, false); - List<Book> books = new LinkedList<Book>(); - books.add(new Book("book", 123L)); - books.add(new Book("book2", 124L)); - bs.echoBooksMultipart(books); - } @Test(expected = BadRequestException.class) public void testJwsJwkBooksHMacMultipartUnsigned() throws Exception { - String address = "https://localhost:" + PORT + "/jwsjwkhmacSinglePart"; + String address = "https://localhost:" + PORT + "/jwsjwkhmac"; BookStore bs = JAXRSClientFactory.create(address, BookStore.class, JAXRSJwsMultipartTest.class.getResource("client.xml").toString()); bs.echoBookMultipart(new Book("book", 123L)); } - @Test + @Test(expected = BadRequestException.class) public void testJwsJwkBookHMacMultipartModified() throws Exception { - String address = "https://localhost:" + PORT + "/jwsjwkhmacSinglePartModified"; + String address = "https://localhost:" + PORT + "/jwsjwkhmacModified"; + BookStore bs = createJwsBookStoreHMac(address, false, false); + bs.echoBookMultipartModified(new Book("book", 123L)); + } + @Test(expected = BadRequestException.class) + public void testJwsJwkBookHMacMultipartModifiedBufferPayload() throws Exception { + String address = "https://localhost:" + PORT + "/jwsjwkhmacModifiedBufferPayload"; BookStore bs = createJwsBookStoreHMac(address, true, false); - try { - bs.echoBookMultipart(new Book("book", 123L)); - fail("Exception is expected"); - } catch (WebApplicationException ex) { - // expected - } + bs.echoBookMultipartModified(new Book("book", 123L)); } + private BookStore createJwsBookStoreHMac(String address, - boolean supportSinglePart, + boolean bufferPayload, boolean useJwsJsonSignatureFormat) throws Exception { - JAXRSClientFactoryBean bean = createJAXRSClientFactoryBean(address, supportSinglePart, + JAXRSClientFactoryBean bean = createJAXRSClientFactoryBean(address, bufferPayload, useJwsJsonSignatureFormat); bean.getProperties(true).put("rs.security.signature.properties", "org/apache/cxf/systest/jaxrs/security/secret.jwk.properties"); return bean.create(BookStore.class); } - private BookStore createJwsBookStoreRSA(String address, boolean supportSinglePart) throws Exception { - JAXRSClientFactoryBean bean = createJAXRSClientFactoryBean(address, supportSinglePart, false); + private BookStore createJwsBookStoreRSA(String address) throws Exception { + JAXRSClientFactoryBean bean = createJAXRSClientFactoryBean(address, false, false); bean.getProperties(true).put("rs.security.signature.properties", "org/apache/cxf/systest/jaxrs/security/alice.jwk.properties"); return bean.create(BookStore.class); } private JAXRSClientFactoryBean createJAXRSClientFactoryBean(String address, - boolean supportSinglePart, + boolean bufferPayload, boolean useJwsJsonSignatureFormat) throws Exception { JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean(); SpringBusFactory bf = new SpringBusFactory(); @@ -166,11 +157,10 @@ public class JAXRSJwsMultipartTest extends AbstractBusClientServerTestBase { bean.setAddress(address); List<Object> providers = new LinkedList<Object>(); JwsMultipartClientRequestFilter outFilter = new JwsMultipartClientRequestFilter(); - outFilter.setSupportSinglePartOnly(supportSinglePart); outFilter.setUseJwsJsonSignatureFormat(useJwsJsonSignatureFormat); providers.add(outFilter); JwsMultipartClientResponseFilter inFilter = new JwsMultipartClientResponseFilter(); - inFilter.setSupportSinglePartOnly(supportSinglePart); + inFilter.setBufferPayload(bufferPayload); providers.add(inFilter); providers.add(new JwsDetachedSignatureProvider()); bean.setProviders(providers); http://git-wip-us.apache.org/repos/asf/cxf/blob/2f01683b/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverMultipart.xml ---------------------------------------------------------------------- diff --git a/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverMultipart.xml b/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverMultipart.xml index 77291bf..53883d6 100644 --- a/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverMultipart.xml +++ b/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverMultipart.xml @@ -46,14 +46,11 @@ under the License. <bean id="jwsOutMultipartFilter" class="org.apache.cxf.rs.security.jose.jaxrs.multipart.JwsMultipartContainerResponseFilter"/> <bean id="jwsDetachedSignatureWriter" class="org.apache.cxf.rs.security.jose.jaxrs.JwsDetachedSignatureProvider"/> <bean id="jwsInMultipartModificationFilter" class="org.apache.cxf.systest.jaxrs.security.jose.jwejws.MultipartModificationFilter"/> - <bean id="jwsInMultipartFilterManyParts" class="org.apache.cxf.rs.security.jose.jaxrs.multipart.JwsMultipartContainerRequestFilter"> - <property name="supportSinglePartOnly" value="false"/> - </bean> - <bean id="jwsOutMultipartFilterManyParts" class="org.apache.cxf.rs.security.jose.jaxrs.multipart.JwsMultipartContainerResponseFilter"> - <property name="supportSinglePartOnly" value="false"/> + <bean id="jwsInMultipartFilterBufferPayload" class="org.apache.cxf.rs.security.jose.jaxrs.multipart.JwsMultipartContainerRequestFilter"> + <property name="bufferPayload" value="true"/> </bean> - <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkhmacSinglePart"> + <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkhmac"> <jaxrs:serviceBeans> <ref bean="serviceBean"/> </jaxrs:serviceBeans> @@ -66,7 +63,7 @@ under the License. <entry key="rs.security.signature.properties" value="org/apache/cxf/systest/jaxrs/security/secret.jwk.properties"/> </jaxrs:properties> </jaxrs:server> - <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkhmacSinglePartJwsJson"> + <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkhmacJwsJson"> <jaxrs:serviceBeans> <ref bean="serviceBean"/> </jaxrs:serviceBeans> @@ -79,7 +76,7 @@ under the License. <entry key="rs.security.signature.properties" value="org/apache/cxf/systest/jaxrs/security/secret.jwk.properties"/> </jaxrs:properties> </jaxrs:server> - <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkrsaSinglePart"> + <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkrsa"> <jaxrs:serviceBeans> <ref bean="serviceBean"/> </jaxrs:serviceBeans> @@ -92,7 +89,7 @@ under the License. <entry key="rs.security.signature.properties" value="org/apache/cxf/systest/jaxrs/security/alice.jwk.properties"/> </jaxrs:properties> </jaxrs:server> - <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkhmacSinglePartModified"> + <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkhmacModified"> <jaxrs:serviceBeans> <ref bean="serviceBean"/> </jaxrs:serviceBeans> @@ -104,13 +101,25 @@ under the License. <entry key="rs.security.signature.properties" value="org/apache/cxf/systest/jaxrs/security/secret.jwk.properties"/> </jaxrs:properties> </jaxrs:server> - <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkhmacManyParts"> + <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkhmacModifiedBufferPayload"> + <jaxrs:serviceBeans> + <ref bean="serviceBean"/> + </jaxrs:serviceBeans> + <jaxrs:providers> + <ref bean="jwsInMultipartModificationFilter"/> + <ref bean="jwsInMultipartFilterBufferPayload"/> + </jaxrs:providers> + <jaxrs:properties> + <entry key="rs.security.signature.properties" value="org/apache/cxf/systest/jaxrs/security/secret.jwk.properties"/> + </jaxrs:properties> + </jaxrs:server> + <jaxrs:server address="https://localhost:${testutil.ports.jaxrs-jws-multipart}/jwsjwkhmacBufferPayload"> <jaxrs:serviceBeans> <ref bean="serviceBean"/> </jaxrs:serviceBeans> <jaxrs:providers> - <ref bean="jwsInMultipartFilterManyParts"/> - <ref bean="jwsOutMultipartFilterManyParts"/> + <ref bean="jwsInMultipartFilterBufferPayload"/> + <ref bean="jwsOutMultipartFilter"/> <ref bean="jwsDetachedSignatureWriter"/> </jaxrs:providers> <jaxrs:properties>
