即
我使用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,但不是全部。
答案 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的部分。