|
30 | 30 | import org.thymeleaf.standard.expression.StandardExpressions; |
31 | 31 | import org.thymeleaf.web.IWebExchange; |
32 | 32 | import org.thymeleaf.web.IWebRequest; |
| 33 | +import org.thymeleaf.web.servlet.IServletWebRequest; |
33 | 34 | import org.unbescape.html.HtmlEscape; |
34 | 35 |
|
35 | 36 | @SuppressWarnings("unchecked") |
@@ -165,7 +166,7 @@ private static String buildBaseUrl(final ITemplateContext context, Collection<St |
165 | 166 | final IWebRequest request = webExchange.getRequest(); |
166 | 167 |
|
167 | 168 | // URL base path from request |
168 | | - builder.append(request.getRequestURL()); |
| 169 | + builder.append(getRequestURI(request)); |
169 | 170 |
|
170 | 171 | Map<String, String[]> params = request.getParameterMap(); |
171 | 172 | Set<Entry<String, String[]>> entries = params.entrySet(); |
@@ -203,6 +204,31 @@ private static String buildBaseUrl(final ITemplateContext context, Collection<St |
203 | 204 | return url == null ? EMPTY : url; |
204 | 205 | } |
205 | 206 |
|
| 207 | + private static String getRequestURI(IWebRequest webRequest) { |
| 208 | + if (webRequest instanceof IServletWebRequest servletWebRequest) { |
| 209 | + return servletWebRequest.getRequestURI(); |
| 210 | + } else { |
| 211 | + // from org.thymeleaf.web.IWebRequest.getRequestURL |
| 212 | + String scheme = webRequest.getScheme(); |
| 213 | + String serverName = webRequest.getServerName(); |
| 214 | + Integer serverPort = webRequest.getServerPort(); |
| 215 | + String requestPath = webRequest.getRequestPath(); |
| 216 | + if (scheme != null && serverName != null && serverPort != null) { |
| 217 | + StringBuilder urlBuilder = new StringBuilder(); |
| 218 | + urlBuilder.append(scheme).append("://").append(serverName); |
| 219 | + if ((!scheme.equals("http") || serverPort != 80) && (!scheme.equals("https") || serverPort != 443)) { |
| 220 | + urlBuilder.append(':').append(serverPort); |
| 221 | + } |
| 222 | + |
| 223 | + urlBuilder.append(requestPath); |
| 224 | + |
| 225 | + return urlBuilder.toString(); |
| 226 | + } else { |
| 227 | + throw new UnsupportedOperationException("Request scheme, server name or port are null in this environment. Cannot compute request URL"); |
| 228 | + } |
| 229 | + } |
| 230 | + } |
| 231 | + |
206 | 232 | private static boolean isPageInstance(Object page) { |
207 | 233 | return page != null && (page instanceof Page<?>); |
208 | 234 | } |
|
0 commit comments