Find exact matches in WebJarsResourceResolver
Prior to this commit, resolving resources from webjars using the `WebJarAssetLocator.getFullPath` could lead to multiple candidates, since this method is trying to find *any* resource matching that path under the given webjar location. This commit replaces that call with `WebJarAssetLocator.getFullPathExact`, which avoids those multiple matches and only resolves resources if the given path is exact. Issue: SPR-15526
This commit is contained in:
		
							parent
							
								
									8deec9569c
								
							
						
					
					
						commit
						e2aa117ff9
					
				| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Copyright 2002-2016 the original author or authors.
 | 
					 * Copyright 2002-2017 the original author or authors.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 * you may not use this file except in compliance with the License.
 | 
					 * you may not use this file except in compliance with the License.
 | 
				
			||||||
| 
						 | 
					@ -17,9 +17,9 @@
 | 
				
			||||||
package org.springframework.web.servlet.resource;
 | 
					package org.springframework.web.servlet.resource;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import javax.servlet.http.HttpServletRequest;
 | 
					import javax.servlet.http.HttpServletRequest;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.webjars.MultipleMatchesException;
 | 
					 | 
				
			||||||
import org.webjars.WebJarAssetLocator;
 | 
					import org.webjars.WebJarAssetLocator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.springframework.core.io.Resource;
 | 
					import org.springframework.core.io.Resource;
 | 
				
			||||||
| 
						 | 
					@ -99,26 +99,16 @@ public class WebJarsResourceResolver extends AbstractResourceResolver {
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	protected String findWebJarResourcePath(String path) {
 | 
						protected String findWebJarResourcePath(String path) {
 | 
				
			||||||
		try {
 | 
							int startOffset = (path.startsWith("/") ? 1 : 0);
 | 
				
			||||||
			int startOffset = (path.startsWith("/") ? 1 : 0);
 | 
							int endOffset = path.indexOf("/", 1);
 | 
				
			||||||
			int endOffset = path.indexOf("/", 1);
 | 
							if (endOffset != -1) {
 | 
				
			||||||
			if (endOffset != -1) {
 | 
								String webjar = path.substring(startOffset, endOffset);
 | 
				
			||||||
				String webjar = path.substring(startOffset, endOffset);
 | 
								String partialPath = path.substring(endOffset + 1);
 | 
				
			||||||
				String partialPath = path.substring(endOffset);
 | 
								String webJarPath = webJarAssetLocator.getFullPathExact(webjar, partialPath);
 | 
				
			||||||
				String webJarPath = webJarAssetLocator.getFullPath(webjar, partialPath);
 | 
								if (webJarPath != null) {
 | 
				
			||||||
				return webJarPath.substring(WEBJARS_LOCATION_LENGTH);
 | 
									return webJarPath.substring(WEBJARS_LOCATION_LENGTH);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		catch (MultipleMatchesException ex) {
 | 
					 | 
				
			||||||
			if (logger.isWarnEnabled()) {
 | 
					 | 
				
			||||||
				logger.warn("WebJar version conflict for \"" + path + "\"", ex);
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		catch (IllegalArgumentException ex) {
 | 
					 | 
				
			||||||
			if (logger.isTraceEnabled()) {
 | 
					 | 
				
			||||||
				logger.trace("No WebJar resource found for \"" + path + "\"");
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return null;
 | 
							return null;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue