Close

Spring MVC - HandlerInterceptor Examples

[Last Updated: Nov 9, 2025]

Spring MVC 

This HandlerInterceptor implementation tries to retrieve TimeZone from LocaleContextResolver, if it's null the request is redirected to a JavaScript page to get time zone information from the client.


package com.logicbig.example;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import org.springframework.web.servlet.support.RequestContextUtils;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.TimeZone;

public class TzRedirectInterceptor extends HandlerInterceptorAdapter {

@Override
public boolean preHandle (HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {

TimeZone tz = RequestContextUtils.getTimeZone(request);

if (tz == null) {
System.out.println("Forwarding to js to get timezone offset");
request.setAttribute("requestedUrl", request.getRequestURI());
RequestDispatcher dispatcher = request.getRequestDispatcher("/tzHandler");
dispatcher.forward(request, response);
return false;
}

return true;
}
}

@RequestMapping("/tzHandler")
public String handle () {
return "tzJsPage";
}

src\main\webapp\WEB-INF\views\tzJsPage.jsp:

<%@ page language="java"
contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>

<html>
<body>
<form method="post" id="tzForm" action="/tzValueHandler">
<input id="tzInput" type="hidden" name="timeZoneOffset"><br>
<input type="hidden" name="requestedUrl" value="${requestedUrl}">
</form>

<script>
var date = new Date();
var offSet = date.getTimezoneOffset();
document.getElementById("tzInput").value = offSet;
document.getElementById("tzForm").submit();
</script>

</body>
</html>


Original Post




Using HandlerInterceptorAdapter

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {

RequestMapping rm = ((HandlerMethod) handler).getMethodAnnotation(
RequestMapping.class);

boolean alreadyLoggedIn = request.getSession()
.getAttribute("user") != null;
boolean loginPageRequested = rm != null &&
rm.value().length > 0 &&
"login".equals(rm.value()[0]);


if (alreadyLoggedIn && loginPageRequested) {
response.sendRedirect(request.getContextPath() + "/app/main-page");
return false;
} else if (!alreadyLoggedIn && !loginPageRequested) {
response.sendRedirect(request.getContextPath() + "/login");
return false;
}

return true;
}
}




Using HandlerInterceptorAdapter

import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class LoggingInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {

request.setAttribute("startTime", System.currentTimeMillis());

HandlerMethod hm = (HandlerMethod) handler;
System.out.printf("From Interceptor, target handler: %s#%s%n",
hm.getBeanType().getSimpleName(),
hm.getMethod().getName());

return true;
}

@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler,
ModelAndView modelAndView) throws Exception {
if (modelAndView != null) {
Long startTime = (Long) request.getAttribute(
"startTime");
modelAndView.addObject(
"footerNote",
String.format("Rendered in %s ms",
System.currentTimeMillis() - startTime));
}
}

@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) throws Exception {
long elapsed = System.currentTimeMillis() -
(Long) request.getAttribute("startTime");
System.out.printf("From Interceptor: %s completed in %sms%n",
request.getRequestURI(),
elapsed);
}
}
Original Post




See Also

Join