@Override public String transformUrl(String url) { return this.delegate.transformUrl(url); }
@Override public String transformUrl(String url) { return getDelegate().transformUrl(url); }
@Override public String transformUrl(String url) { return getDelegate().transformUrl(url); }
/** * Return a context-aware URl for the given relative URL. * @param relativeUrl the relative URL part * @return a URL that points back to the current web application with an * absolute path also URL-encoded accordingly */ public String getContextUrl(String relativeUrl) { String url = StringUtils.applyRelativePath(getContextPath() + "/", relativeUrl); return getExchange().transformUrl(url); }
/** * Send a redirect back to the HTTP client. * @param targetUrl the target URL to redirect to * @param exchange current exchange */ protected Mono<Void> sendRedirect(String targetUrl, ServerWebExchange exchange) { String transformedUrl = (isRemoteHost(targetUrl) ? targetUrl : exchange.transformUrl(targetUrl)); ServerHttpResponse response = exchange.getResponse(); response.getHeaders().setLocation(URI.create(transformedUrl)); response.setStatusCode(getStatusCode()); return Mono.empty(); }
/** * Return a context-aware URl for the given relative URL with placeholders -- * named keys with braces {@code {}}. For example, send in a relative URL * {@code foo/{bar}?spam={spam}} and a parameter map {@code {bar=baz,spam=nuts}} * and the result will be {@code [contextpath]/foo/baz?spam=nuts}. * @param relativeUrl the relative URL part * @param params a map of parameters to insert as placeholders in the url * @return a URL that points back to the current web application with an * absolute path also URL-encoded accordingly */ public String getContextUrl(String relativeUrl, Map<String, ?> params) { String url = StringUtils.applyRelativePath(getContextPath() + "/", relativeUrl); UriTemplate template = new UriTemplate(url); url = template.expand(params).toASCIIString(); return getExchange().transformUrl(url); }
@Test public void transformUrlDefault() { ServerWebExchange exchange = createExchange(); assertEquals("/foo", exchange.transformUrl("/foo")); }
@Test public void transformUrlWithEncoder() { ServerWebExchange exchange = createExchange(); exchange.addUrlTransformer(s -> s + "?nonce=123"); assertEquals("/foo?nonce=123", exchange.transformUrl("/foo")); }
@Test public void transformUrlWithMultipleEncoders() { ServerWebExchange exchange = createExchange(); exchange.addUrlTransformer(s -> s + ";p=abc"); exchange.addUrlTransformer(s -> s + "?q=123"); assertEquals("/foo;p=abc?q=123", exchange.transformUrl("/foo")); }
@Override public String transformUrl(String url) { return getDelegate().transformUrl(url); }
@Override public String transformUrl(String url) { return getDelegate().transformUrl(url); }
/** * <p> * Process an already-built URL just before returning it. * </p> * <p> * This method can be overridden by any subclasses that want to change this behaviour. * </p> * * @param context the execution context. * @param link the already-built URL. * @return the processed URL, ready to be used. */ @Override protected String processLink(final IExpressionContext context, final String link) { if (!(context instanceof ISpringWebFluxContext)) { return link; } final ServerWebExchange exchange = ((ISpringWebFluxContext)context).getExchange(); return exchange.transformUrl(link); }