【发布时间】:2016-06-29 14:26:36
【问题描述】:
我正在尝试根据带有 Spring @RequestMapping 注释的方法上的注释来实现一些逻辑。
所以我的方法中有一个HttpServletRequest 实例,我想问spring“给我一个方法,将调用它来处理这个请求”,所以我可以使用反射API来询问我的注释是否存在或不是,所以我可以改变处理。
有没有什么简单的方法可以从 Spring MVC 中获取这些信息?
【问题讨论】:
-
你想做的很糟糕。也就是说,与其自己调用该方法,不如在您的 servlet 中构建一个请求分派器并将请求分派到所需的 url。
-
你做错了。相反,您应该使用 AOP,以便对使用您的注解进行注解的方法的所有调用都通过将执行处理的 Aspect。下面是一个示例,它拦截了对带有
@Authenticated注释的方法的所有调用,如果当前用户未通过身份验证,则抛出异常:gist.github.com/jnizet/10ba6b0b6023e0d8ac228d2450d96193 -
“我的方法中有一个 HttpServletRequest 实例” 哪个方法?听起来您在方法 X 中,想知道方法 X 是否有注释 Y。
-
目的很简单。自定义 CSRF 保护注释。 Spring 安全请求匹配器只为您提供 HttpRequest 对象,而不是目标,因此您需要以某种方式查找它......这可以通过 RequestMappingHandlerMapping 来完成(但这是第二个问题,因为 Spring 安全性严格绑定到 ROOT 上下文 -所以 RequestMappingHandlerMapping 对子网络上下文毫无用处......所以这就是为什么这个问题)
标签: java spring spring-mvc