如何在Spring MVC Web App中运行大多数请求的公共代码?

时间:2012-01-19 15:11:30

标签: java spring spring-mvc spring-aop

我使用Spring MVC RequestMapping

映射了各种URL
@RequestMapping(value = "/mystuff", method = RequestMethod.GET) 
@RequestMapping(value = "/mystuff/dsf", method = RequestMethod.GET) 
@RequestMapping(value = "/mystuff/eee", method = RequestMethod.GET) 

我想在大约90%的请求之前运行一些常见操作。这些是跨越几个控制器。

在没有深入研究AOP的情况下,有没有这样做呢?如果我必须使用方面,任何指导如何做到这一点?!

谢谢!

更多信息:

运行某些应用程序特定的安全性 - 我们被链接到父安全设置,我们需要读取和调用,然后需要在我们的一些大多数调用之前访问cookie,但不是全部。

3 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

拦截器是解决方案。它有方法preHandler和postHandler,它们将分别在每个请求之前和之后调用。您可以挂钩到每个HTTPServletRequest对象,也可以通过挖掘它来传递几个。

这是一个示例代码:

@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);
    }
}

答案 2 :(得分:1)

HandlerInterceptor.preHandle()方法使您可以访问请求和响应以及目标处理程序。在Spring 3.1中,它将是HandlerMethod类型,它允许您访问目标控制器类和方法。如果它有帮助,您可以尝试按类型名称排除整个控制器类,类型名称将是强类型的,而不指定显式URL。

另一个选项是创建一个映射到一组URL模式的拦截器。请参阅参考文档中有关配置Spring MVC的部分。