Repository: cxf Updated Branches: refs/heads/master 56b99bada -> 76cbcf803
[CXF-6579] Making deflate level configurable Project: http://git-wip-us.apache.org/repos/asf/cxf/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/76cbcf80 Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/76cbcf80 Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/76cbcf80 Branch: refs/heads/master Commit: 76cbcf803d09f5669cabb1d31d110c902673c74c Parents: 56b99ba Author: Sergey Beryozkin <[email protected]> Authored: Sun Sep 6 19:09:38 2015 +0100 Committer: Sergey Beryozkin <[email protected]> Committed: Sun Sep 6 19:09:38 2015 +0100 ---------------------------------------------------------------------- .../cxf/common/util/CompressionUtils.java | 6 +++- .../rs/security/saml/DeflateEncoderDecoder.java | 30 +++++++++++++++++++- .../saml/DeflateEncoderDecoderTest.java | 21 +++++++++++++- 3 files changed, 54 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf/blob/76cbcf80/core/src/main/java/org/apache/cxf/common/util/CompressionUtils.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/cxf/common/util/CompressionUtils.java b/core/src/main/java/org/apache/cxf/common/util/CompressionUtils.java index 6b48aa7..c80352e 100644 --- a/core/src/main/java/org/apache/cxf/common/util/CompressionUtils.java +++ b/core/src/main/java/org/apache/cxf/common/util/CompressionUtils.java @@ -72,7 +72,11 @@ public final class CompressionUtils { } public static byte[] deflate(byte[] tokenBytes, boolean nowrap) { - Deflater compresser = new Deflater(Deflater.DEFLATED, nowrap); + return deflate(tokenBytes, Deflater.DEFLATED, nowrap); + } + + public static byte[] deflate(byte[] tokenBytes, int level, boolean nowrap) { + Deflater compresser = new Deflater(level, nowrap); compresser.setInput(tokenBytes); compresser.finish(); http://git-wip-us.apache.org/repos/asf/cxf/blob/76cbcf80/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/DeflateEncoderDecoder.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/DeflateEncoderDecoder.java b/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/DeflateEncoderDecoder.java index 0b2925e..c1b20c8 100644 --- a/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/DeflateEncoderDecoder.java +++ b/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/DeflateEncoderDecoder.java @@ -20,8 +20,12 @@ package org.apache.cxf.rs.security.saml; import java.io.InputStream; import java.util.zip.DataFormatException; +import java.util.zip.Deflater; import org.apache.cxf.common.util.CompressionUtils; +import org.apache.cxf.common.util.PropertyUtils; +import org.apache.cxf.message.Message; +import org.apache.cxf.phase.PhaseInterceptorChain; public class DeflateEncoderDecoder { public InputStream inflateToken(byte[] deflatedToken) @@ -30,6 +34,30 @@ public class DeflateEncoderDecoder { } public byte[] deflateToken(byte[] tokenBytes) { - return CompressionUtils.deflate(tokenBytes); + + return deflateToken(tokenBytes, true); + } + + public byte[] deflateToken(byte[] tokenBytes, boolean nowrap) { + + return deflateToken(tokenBytes, getDeflateLevel(), nowrap); + } + + public byte[] deflateToken(byte[] tokenBytes, int level, boolean nowrap) { + + return CompressionUtils.deflate(tokenBytes, level, nowrap); + } + + private static int getDeflateLevel() { + Integer level = null; + + Message m = PhaseInterceptorChain.getCurrentMessage(); + if (m != null) { + level = PropertyUtils.getInteger(m, "deflate.level"); + } + if (level == null) { + level = Deflater.DEFLATED; + } + return level; } } http://git-wip-us.apache.org/repos/asf/cxf/blob/76cbcf80/rt/rs/security/xml/src/test/java/org/apache/cxf/rs/security/saml/DeflateEncoderDecoderTest.java ---------------------------------------------------------------------- diff --git a/rt/rs/security/xml/src/test/java/org/apache/cxf/rs/security/saml/DeflateEncoderDecoderTest.java b/rt/rs/security/xml/src/test/java/org/apache/cxf/rs/security/saml/DeflateEncoderDecoderTest.java index 47de912..15a2512 100644 --- a/rt/rs/security/xml/src/test/java/org/apache/cxf/rs/security/saml/DeflateEncoderDecoderTest.java +++ b/rt/rs/security/xml/src/test/java/org/apache/cxf/rs/security/saml/DeflateEncoderDecoderTest.java @@ -18,8 +18,11 @@ */ package org.apache.cxf.rs.security.saml; +import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.zip.DataFormatException; +import java.util.zip.Inflater; +import java.util.zip.InflaterInputStream; import org.apache.cxf.common.util.Base64Utility; import org.apache.cxf.helpers.IOUtils; @@ -62,5 +65,21 @@ public class DeflateEncoderDecoderTest extends Assert { assertNotNull(is); assertEquals("valid_grant", IOUtils.readStringFromStream(is)); } - + @Test + public void testInflateDeflateWithTokenDuplication() throws Exception { + String token = "valid_grant valid_grant valid_grant valid_grant valid_grant valid_grant"; + + DeflateEncoderDecoder deflateEncoderDecoder = new DeflateEncoderDecoder(); + byte[] deflatedToken = deflateEncoderDecoder.deflateToken(token.getBytes(), 0, true); + + String cxfInflatedToken = IOUtils + .toString(deflateEncoderDecoder.inflateToken(deflatedToken)); + + String streamInflatedToken = IOUtils.toString( + new InflaterInputStream(new ByteArrayInputStream(deflatedToken), + new Inflater(true))); + + assertEquals(streamInflatedToken, token); + assertEquals(cxfInflatedToken, token); + } }
