--- UrlBindingFactory.java.orig	2009-06-12 21:12:05.000000000 +0200
+++ UrlBindingFactory.java	2009-06-12 21:20:53.000000000 +0200
@@ -462,15 +462,23 @@
     protected Set<String> getCachedPrefixes(UrlBinding binding) {
         Set<String> prefixes = new TreeSet<String>();
 
-        // Add binding as a candidate for some prefixes (path + /, path + leading literal, etc.)
-        if (binding.getPath().endsWith("/"))
-            prefixes.add(binding.getPath());
-        else
-            prefixes.add(binding.getPath() + '/');
+        List<UrlBinding> parameters = binding.getParameters();
+        if (binding != null && !binding.getParameters().isEmpty())
+        {
+            // Ignore bindings without parameters: they are static, and hence already match.
+			// Also, as an example, a binding of @UrlBinding("/profile") should not match "/profile/gg".
+			// Fixes issue STS-688.
+
+            // Add binding as a candidate for some prefixes (path + /, path + leading literal, etc.)
+            if (binding.getPath().endsWith("/"))
+                prefixes.add(binding.getPath());
+            else
+                prefixes.add(binding.getPath() + '/');
 
-        List<Object> components = binding.getComponents();
-        if (components != null && !components.isEmpty() && components.get(0) instanceof String) {
-            prefixes.add(binding.getPath() + components.get(0));
+            List<Object> components = binding.getComponents();
+            if (components != null && !components.isEmpty() && components.get(0) instanceof String) {
+                prefixes.add(binding.getPath() + components.get(0));
+            }
         }
 
         return prefixes;

