How to redirect in a servlet filter?

JavaServletsRedirectServlet Filters

Java Problem Overview


I'm trying to find a method to redirect my request from a filter to the login page but I don't know how to redirect from servlet. I've searched but what I find is sendRedirect() method. I can't find this method on my response object in the filter. What's the cause? How can I solve this?

Java Solutions


Solution 1 - Java

In Filter the response is of ServletResponse rather than HttpServletResponse. Hence do the cast to HttpServletResponse.

HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.sendRedirect("/login.jsp");

If using a context path:

httpResponse.sendRedirect(req.getContextPath() + "/login.jsp");

Also don't forget to call return; at the end.

Solution 2 - Java

>I'm trying to find a method to redirect my request from filter to login page

Don't

You just invoke

chain.doFilter(request, response);

from filter and the normal flow will go ahead.

> I don't know how to redirect from servlet

You can use

response.sendRedirect(url);

to redirect from servlet

Solution 3 - Java

If you also want to keep hash and get parameter, you can do something like this (fill redirectMap at filter init):

String uri = request.getRequestURI();

String[] uriParts = uri.split("[#?]");
String path = uriParts[0];
String rest = uri.substring(uriParts[0].length());

if(redirectMap.containsKey(path)) {
    response.sendRedirect(redirectMap.get(path) + rest);
} else {
    chain.doFilter(request, response);
}

Solution 4 - Java

Try and check of your ServletResponse response is an instanceof HttpServletResponse like so:

if (response instanceof HttpServletResponse) {
	response.sendRedirect(....);
}

Solution 5 - Java

why are you using response object . it is a ServletResponse Object ,it does not provide sendRedirect() method . instead use request object of ServletRequest to forward the request.

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here

		request.getRequestDispatcher("login.html").forward(request,response);
		return;
		
	}

see javadoc

Solution 6 - Java

Your response object is declared as a ServletResponse. To use the sendRedirect() method, you have to cast it to HttpServletResponse. This is an extended interface that adds methods related to the HTTP protocol.

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
QuestionwasimbhalliView Question on Stackoverflow
Solution 1 - JavaDead ProgrammerView Answer on Stackoverflow
Solution 2 - JavajmjView Answer on Stackoverflow
Solution 3 - Javauser1079877View Answer on Stackoverflow
Solution 4 - JavaBuhake SindiView Answer on Stackoverflow
Solution 5 - Javadeepak lodhiView Answer on Stackoverflow
Solution 6 - Javajan.vdberghView Answer on Stackoverflow