@Override public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception { HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class); Assert.state(request != null, "No HttpServletRequest"); return ServletUriComponentsBuilder.fromServletMapping(request); }
/** * Same as {@link #fromServletMapping(HttpServletRequest)} except the * request is obtained through {@link RequestContextHolder}. */ public static ServletUriComponentsBuilder fromCurrentServletMapping() { return fromServletMapping(getCurrentRequest()); }
/** * Same as {@link #fromServletMapping(HttpServletRequest)} except the * request is obtained through {@link RequestContextHolder}. */ public static ServletUriComponentsBuilder fromCurrentServletMapping() { return fromServletMapping(getCurrentRequest()); }
@Override public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception { HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class); Assert.state(request != null, "No HttpServletRequest"); return ServletUriComponentsBuilder.fromServletMapping(request); }
@Test public void fromServletMapping() { this.request.setRequestURI("/mvc-showcase/app/simple"); this.request.setServletPath("/app"); this.request.setQueryString("foo=123"); String result = ServletUriComponentsBuilder.fromServletMapping(this.request).build().toUriString(); assertEquals("http://localhost/mvc-showcase/app", result); }
@Test // SPR-16650 public void fromServletMappingWithForwardedPrefix() throws Exception { this.request.addHeader("X-Forwarded-Prefix", "/prefix"); this.request.setContextPath("/mvc-showcase"); this.request.setServletPath("/app"); this.request.setRequestURI("/mvc-showcase/app/simple"); HttpServletRequest requestToUse = adaptFromForwardedHeaders(this.request); String result = ServletUriComponentsBuilder.fromServletMapping(requestToUse).build().toUriString(); assertEquals("http://localhost/prefix/app", result); }
/** * Returns a {@link UriComponentsBuilder} obtained from the current servlet mapping with scheme tweaked in case the * request contains an {@code X-Forwarded-Ssl} header, which is not (yet) supported by the underlying * {@link UriComponentsBuilder}. If no {@link RequestContextHolder} exists (you're outside a Spring Web call), fall * back to relative URIs. * * @return */ public static UriComponentsBuilder getBuilder() { if (RequestContextHolder.getRequestAttributes() == null) { return UriComponentsBuilder.fromPath("/"); } HttpServletRequest request = getCurrentRequest(); ServletUriComponentsBuilder builder = ServletUriComponentsBuilder.fromServletMapping(request); // Spring 5.1 can handle X-Forwarded-Ssl headers... if (isSpringAtLeast5_1()) { return builder; } else { return handleXForwardedSslHeader(request, builder); } }
/** * Same as {@link #fromServletMapping(HttpServletRequest)} except the * request is obtained through {@link RequestContextHolder}. * <p><strong>Note:</strong> This method extracts values from "Forwarded" * and "X-Forwarded-*" headers if found. See class-level docs. * <p>As of 4.3.15, this method replaces the contextPath with the value * of "X-Forwarded-Prefix" rather than prepending, thus aligning with * {@code ForwardedHeaderFilter}. */ public static ServletUriComponentsBuilder fromCurrentServletMapping() { return fromServletMapping(getCurrentRequest()); }
@Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class); return ServletUriComponentsBuilder.fromServletMapping(request); }
/** * Returns a {@link UriComponentsBuilder} obtained from the current servlet mapping with scheme tweaked in case the * request contains an {@code X-Forwarded-Ssl} header, which is not (yet) supported by the underlying * {@link UriComponentsBuilder}. If no {@link RequestContextHolder} exists (you're outside a Spring Web call), fall * back to relative URIs. * * @return */ static UriComponentsBuilder getBuilder() { if (RequestContextHolder.getRequestAttributes() == null) { return UriComponentsBuilder.fromPath("/"); } HttpServletRequest request = getCurrentRequest(); UriComponentsBuilder builder = ServletUriComponentsBuilder.fromServletMapping(request); // special case handling for X-Forwarded-Ssl: // apply it, but only if X-Forwarded-Proto is unset. String forwardedSsl = request.getHeader("X-Forwarded-Ssl"); ForwardedHeader forwarded = ForwardedHeader.of(request.getHeader(ForwardedHeader.NAME)); String proto = hasText(forwarded.getProto()) ? forwarded.getProto() : request.getHeader("X-Forwarded-Proto"); if (!hasText(proto) && hasText(forwardedSsl) && forwardedSsl.equalsIgnoreCase("on")) { builder.scheme("https"); } return builder; }
/** * Returns a {@link UriComponentsBuilder} obtained from the current servlet mapping with scheme tweaked in case the * request contains an {@code X-Forwarded-Ssl} header, which is not (yet) supported by the underlying * {@link UriComponentsBuilder}. If no {@link RequestContextHolder} exists (you're outside a Spring Web call), fall * back to relative URIs. * * @return */ static UriComponentsBuilder getBuilder() { if (RequestContextHolder.getRequestAttributes() == null) { return UriComponentsBuilder.fromPath("/"); } HttpServletRequest request = getCurrentRequest(); UriComponentsBuilder builder = ServletUriComponentsBuilder.fromServletMapping(request); // special case handling for X-Forwarded-Ssl: // apply it, but only if X-Forwarded-Proto is unset. String forwardedSsl = request.getHeader("X-Forwarded-Ssl"); ForwardedHeader forwarded = ForwardedHeader.of(request.getHeader(ForwardedHeader.NAME)); String proto = hasText(forwarded.getProto()) ? forwarded.getProto() : request.getHeader("X-Forwarded-Proto"); if (!hasText(proto) && hasText(forwardedSsl) && forwardedSsl.equalsIgnoreCase("on")) { builder.scheme("https"); } return builder; }
/** Extracts the base URL from the request */ public static RestUrlBuilder fromRequest(HttpServletRequest request) { return usingBaseUrl(ServletUriComponentsBuilder.fromServletMapping(request).build().toUriString()); }
/** Extracts the base URL from the request */ public static ContentRestUrlBuilder fromRequest(HttpServletRequest request) { return usingBaseUrl(ServletUriComponentsBuilder.fromServletMapping(request).build().toUriString()); }
/** * Returns a {@link UriComponentsBuilder} obtained from the current servlet mapping with scheme tweaked in case the * request contains an {@code X-Forwarded-Ssl} header, which is not (yet) supported by the underlying * {@link UriComponentsBuilder}. If no {@link RequestContextHolder} exists (you're outside a Spring Web call), fall * back to relative URIs. * * @return */ static UriComponentsBuilder getBuilder() { if (RequestContextHolder.getRequestAttributes() == null) { return UriComponentsBuilder.fromPath("/"); } HttpServletRequest request = getCurrentRequest(); UriComponentsBuilder builder = ServletUriComponentsBuilder.fromServletMapping(request); // special case handling for X-Forwarded-Ssl: // apply it, but only if X-Forwarded-Proto is unset. String forwardedSsl = request.getHeader("X-Forwarded-Ssl"); ForwardedHeader forwarded = ForwardedHeader.of(request.getHeader(ForwardedHeader.NAME)); String proto = hasText(forwarded.getProto()) ? forwarded.getProto() : request.getHeader("X-Forwarded-Proto"); if (!hasText(proto) && hasText(forwardedSsl) && forwardedSsl.equalsIgnoreCase("on")) { builder.scheme("https"); } return builder; }
@Nonnull public static UriComponentsBuilder createUriBuilderFromRequest(HttpServletRequest request) { ServletUriComponentsBuilder builder = ServletUriComponentsBuilder.fromServletMapping(request);
/** Extracts the base URL from the request */ public static RestUrlBuilder fromRequest(HttpServletRequest request) { return usingBaseUrl(ServletUriComponentsBuilder.fromServletMapping(request).build().toUriString()); }
/** Extracts the base URL from the request */ public static RestUrlBuilder fromRequest(HttpServletRequest request) { return usingBaseUrl(ServletUriComponentsBuilder.fromServletMapping(request).build().toUriString()); }