您可以HandlerInterceptor
使用您的DispatcherServlet
. 然后实现该postHandle()
方法:
public class CustomInterceptor extends HandlerInterceptorAdapter /* which implements HandlerInterceptor */ {
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
modelAndView.addObject("myObject", new Object());
// add as many as you wish
}
}
注意:该ModelAndView
对象可能是null
. 如果您的处理程序方法直接写入响应正文,例如使用@ResponseBody
.
根据您在注册拦截器时使用的 url 模式,postHandle()
将调用并使用您想要的任何对象填充您的模型。
您还可以注册一个 servlet Filter
(在web.xml
或中WebApplicationInitializer
)。过滤器只是在分派到 servlet 之前添加请求属性。
public class CustomFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setAttribute("myObject", new Object());
chain.doFilter(request, response);
}
// ... init and destroy methods
}
注意:在请求生命周期的某个时刻,Spring 会将所有属性添加model
到您的请求属性中。
这里的缺点是无论您是否@Controller
工作,您都添加属性,因为Filter
在 Spring 之前调用DispatcherServlet
. 此外,Filter
它由您的 servlet 容器管理(存在解决方法),因此很难将 Spring bean 注入其中。