How can I get the request URL from a Java Filter?

JavaUrlServlet Filters

Java Problem Overview


I am trying to write a filter that can retrieve the request URL, but I'm not sure how to do so.

Here is what I have so far:

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

public class MyFilter implements Filter {
	public void init(FilterConfig config) throws ServletException {	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
		chain.doFilter(request, response);

		String url = ((HttpServletRequest) request).getPathTranslated();
		System.out.println("Url: " + url);
	}

	public void destroy() {	}
}

When I hit a page on my server, the only output I see is "Url: null".

What is the correct way to get the requested URL from a given ServletRequest object in a Filter?

Java Solutions


Solution 1 - Java

Is this what you're looking for?

if (request instanceof HttpServletRequest) {
 String url = ((HttpServletRequest)request).getRequestURL().toString();
 String queryString = ((HttpServletRequest)request).getQueryString();
}

To Reconstruct:

System.out.println(url + "?" + queryString);

Info on HttpServletRequest.getRequestURL() and HttpServletRequest.getQueryString().

Solution 2 - Java

Building on another answer on this page,

public static String getCurrentUrlFromRequest(ServletRequest request)
{
   if (! (request instanceof HttpServletRequest))
       return null;

   return getCurrentUrlFromRequest((HttpServletRequest)request);
}

public static String getCurrentUrlFromRequest(HttpServletRequest request)
{
    StringBuffer requestURL = request.getRequestURL();
    String queryString = request.getQueryString();

    if (queryString == null)
        return requestURL.toString();

    return requestURL.append('?').append(queryString).toString();
}

Solution 3 - Java

If you use Spring, you can use OncePerRequestFilter or others.

import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.stereotype.Component;

@Component
public class MyFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
         String url = request.getRequestURL();
         filterChain.doFilter(request, response);
    }

}

Solution 4 - Java

request.getRequestURL();   

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionampersandreView Question on Stackoverflow
Solution 1 - JavaBuhake SindiView Answer on Stackoverflow
Solution 2 - JavaBrad ParksView Answer on Stackoverflow
Solution 3 - JavakyakyaView Answer on Stackoverflow
Solution 4 - JavajmjView Answer on Stackoverflow