Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I run common code for most requests in my Spring MVC Web App?

i.e.

I have various URLs mapped using Spring MVC RequestMapping

@RequestMapping(value = "/mystuff", method = RequestMethod.GET) 
@RequestMapping(value = "/mystuff/dsf", method = RequestMethod.GET) 
@RequestMapping(value = "/mystuff/eee", method = RequestMethod.GET) 

etc

I want to run some common action before about 90% of my requests. These are across several controllers.

Is there anyway to do that without delving into AOP? And if I have to use aspects, any guidance on how to do this?!

Thanks!

More info:

It is to run some app specific security - we are chained to a parent security set up, which we need to read and call into, and then need to access a cookie prior to some most of ours calls, but not all.

like image 636
laura Avatar asked Jan 19 '12 15:01

laura


2 Answers

You can use an Interceptor:

http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-handlermapping

like image 124
Shivan Dragon Avatar answered Sep 25 '22 19:09

Shivan Dragon


Interceptor is the solution. It has methods preHandler and postHandler, which will be called before and after each request respectively. You can hook into each HTTPServletRequest object and also by pass few by digging it.

here is a sample code:

@Component
public class AuthCodeInterceptor extends HandlerInterceptorAdapter {

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

        // set few parameters to handle ajax request from different host
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.addHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS");
        response.addHeader("Access-Control-Max-Age", "1000");
        response.addHeader("Access-Control-Allow-Headers", "Content-Type");
        response.addHeader("Cache-Control", "private");

        String reqUri = request.getRequestURI();
        String serviceName = reqUri.substring(reqUri.lastIndexOf("/") + 1,
                reqUri.length());
                if (serviceName.equals("SOMETHING")) {

                }
        return super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {

        super.postHandle(request, response, handler, modelAndView);
    }
}
like image 27
Badal Avatar answered Sep 23 '22 19:09

Badal