Close

Spring MVC - HandlerInterceptor Examples

Spring MVC 

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-age");
return false;
} else if (!alreadyLoggedIn && !loginPageRequested) {
response.sendRedirect(request.getContextPath() + "/login");
return false;
}

return true;
}
}
Original Post




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




See Also