diff --git a/org.springframework.web/src/main/java/org/springframework/web/util/UriComponents.java b/org.springframework.web/src/main/java/org/springframework/web/util/UriComponents.java index a5b4ec74b9..6123223e79 100644 --- a/org.springframework.web/src/main/java/org/springframework/web/util/UriComponents.java +++ b/org.springframework.web/src/main/java/org/springframework/web/util/UriComponents.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 the original author or authors. + * Copyright 2002-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -286,7 +286,7 @@ public final class UriComponents { if (source == null) { return null; } - + Assert.hasLength(encoding, "'encoding' must not be empty"); byte[] bytes = encodeBytes(source.getBytes(encoding), type); @@ -406,7 +406,7 @@ public final class UriComponents { private UriComponents expandInternal(UriTemplateVariables uriVariables) { Assert.state(!encoded, "Cannot expand an already encoded UriComponents object"); - + String expandedScheme = expandUriComponent(this.scheme, uriVariables); String expandedUserInfo = expandUriComponent(this.userInfo, uriVariables); String expandedHost = expandUriComponent(this.host, uriVariables); @@ -458,6 +458,16 @@ public final class UriComponents { return variableValue != null ? variableValue.toString() : ""; } + /** + * Normalize the path removing sequences like "path/..". + * @see StringUtils#cleanPath(String) + */ + public UriComponents normalize() { + String normalizedPath = StringUtils.cleanPath(getPath()); + return new UriComponents(scheme, userInfo, host, this.port, new FullPathComponent(normalizedPath), + queryParams, fragment, encoded, false); + } + // other functionality /** @@ -930,7 +940,7 @@ public final class UriComponents { } } - + /** * Represents an empty path. diff --git a/org.springframework.web/src/test/java/org/springframework/web/util/UriComponentsTests.java b/org.springframework.web/src/test/java/org/springframework/web/util/UriComponentsTests.java index 00049b00c8..234a21c090 100644 --- a/org.springframework.web/src/test/java/org/springframework/web/util/UriComponentsTests.java +++ b/org.springframework.web/src/test/java/org/springframework/web/util/UriComponentsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2011 the original author or authors. + * Copyright 2002-2012 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -69,4 +69,10 @@ public class UriComponentsTests { UriComponentsBuilder.fromPath("/fo%2o").build(true); } + @Test + public void normalize() { + UriComponents uriComponents = UriComponentsBuilder.fromUriString("http://example.com/foo/../bar").build(); + assertEquals("http://example.com/bar", uriComponents.normalize().toString()); + } + }