Spring Interceptors has the ability
to pre-handle and post-handle the web requests. Each interceptor class should
extend the HandlerInterceptorAdapter class. Here we will create a Logger Interceptor by extending the HandlerInterceptorAdapter class. You can override any of the three callback methodspreHandle(), postHandle() and afterCompletion(). As the names
indicate the preHandle() method will be called before handling the request, the postHandle() method will be called after handling the request and the afterCompletion() method will be called after rendering the view.
In each method we
will log information using log4j. First instantiate the logger in the static
context, then set up the basic configuration so that the log messages will be
logged on the console.
The LoggerInterceptor class is shown below.
package com.vaannila.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.Logger;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.
HandlerInterceptorAdapter;
public class LoggerInterceptor extends HandlerInterceptorAdapter {
static Logger logger =
Logger.getLogger(LoggerInterceptor.class);
static{
BasicConfigurator.configure();
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object
handler) throws Exception {
logger.info("Before
handling the request");
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object
handler,
ModelAndView modelAndView) throws Exception {
logger.info("After
handling the request");
super.postHandle(request,
response, handler, modelAndView);
}
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object
handler, Exception ex)
throws Exception {
logger.info("After
rendering the view");
super.afterCompletion(request,
response, handler, ex);
}
}
Now the logger interceptor is
created you need to associate this interceptor with the handler mapping. Here
we use BeanNameUrlHandlerMapping, incase you are
using more than one handler mapping you need to associate the interceptor with
each one of them. The code below shows how to associate an interceptor with the
handler mapping.
<?xml version="0" encoding="UTF-8"?>
xsi:schemaLocation="http://www.springframework.org/schema/beans
<bean id="viewResolver" class="org.springframework.web.servlet.view.
InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/"p:suffix=".jsp" />
<bean id="handlerMapping"class="org.springframework.web.servlet.handler.
BeanNameUrlHandlerMapping" p:interceptors-ref="loggerInterceptor" />
<bean id="loggerInterceptor"class="com.vaannila.interceptor.LoggerInterceptor" />
<bean id="userService" class="com.vaannila.service.UserServiceImpl" />
<bean name="/userRegistration.htm"class="com.vaannila.web.UserController" p:userService-ref="userService" p:formView="userForm" p:successView="userSuccess"/>
</beans>
When you execute
the example you can see the log messages getting dispalyed on the console.

No comments:
Post a Comment