代码之家  ›  专栏  ›  技术社区  ›  Robert Munteanu

Spring WebMVC:interceptor,它可以访问方法定义和HttpServletRequest

  •  3
  • Robert Munteanu  · 技术社区  · 14 年前

    我正试图拦截Spring控制器调用,这些调用被注释,类似于:

    @RequestMapping("/my/page")
    @AccessRestriction(module = Module.Audit, action = AuditActions.Log)
    public ModelAndView myPage() {
       // pls type teh codez
    } 
    

    此时,我想访问 @AccessRestriction 方法 HttpServletRequest 对象检查值是否与限制和 HttpServletResponse 对象以发送重定向(如果适用)。也可以抛出异常。

    我已经调查过了 Interceptors 但它们不提供对方法的访问,只提供处理程序。我的选择是什么?

    1 回复  |  直到 14 年前
        1
  •  3
  •   skaffman    14 年前

    我的建议是分离这两个关注点,一个是检查注释并抛出异常,另一个是捕获异常并将其转换为重定向。

    第一个问题可以使用 Auto-proxy facility ,它将对控制器对象上的任何调用应用AOP样式的侦听器。他们将检查注释、验证调用并抛出一个自定义 RuntimeException 是违反了条件。

    你可以有一个习惯 HandlerInterceptor 它在 afterCompletion 方法,如果存在,则通过响应对象发送重定向。