我正在尝试拦截带注释的Spring Controller调用,类似于:
@RequestMapping("/my/page")
@AccessRestriction(module = Module.Audit, action = AuditActions.Log)
public ModelAndView myPage() {
// pls type teh codez
}
此时我想访问@AccessRestriction
方法的值,HttpServletRequest
对象以检查值是否与限制匹配,以及HttpServletResponse
对象以便发送重定向,如果适用的话。能够抛出异常也可能是合适的。
我查看过Interceptors,但他们不提供对方法的访问权限,只提供对处理程序的访问权限。我有什么选择实现这个目标?
答案 0 :(得分:3)
我的建议是将两个问题分开,一个用于检查注释并抛出异常,另一个用于捕获该异常并将其转换为重定向。
可以使用Auto-proxy facility来完成第一个问题,它会将AOP样式的拦截器应用于控制器对象上的任何调用。他们会检查注释,验证调用,并抛出自定义RuntimeException
是违反条件的。
然后,您可以使用自定义HandlerInterceptor
在afterCompletion
方法中检查此异常,并通过响应对象发送重定向(如果存在)。