Spring WebMVC:拦截器,可以访问方法定义和HttpServletRequest

时间:2010-11-16 13:48:18

标签: spring spring-mvc

我正在尝试拦截带注释的Spring Controller调用,类似于:

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

此时我想访问@AccessRestriction方法的值,HttpServletRequest对象以检查值是否与限制匹配,以及HttpServletResponse对象以便发送重定向,如果适用的话。能够抛出异常也可能是合适的。

我查看过Interceptors,但他们不提供对方法的访问权限,只提供对处理程序的访问权限。我有什么选择实现这个目标?

1 个答案:

答案 0 :(得分:3)

我的建议是将两个问题分开,一个用于检查注释并抛出异常,另一个用于捕获该异常并将其转换为重定向。

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

然后,您可以使用自定义HandlerInterceptorafterCompletion方法中检查此异常,并通过响应对象发送重定向(如果存在)。