gpt4 book ai didi

spring mvc 从拦截器获取映射 Controller 方法

转载 作者:行者123 更新时间:2023-12-02 09:31:45 26 4
gpt4 key购买 nike

现在我有一个像这样的 Controller

@RequestMapping("/content/delete.json")
@Security(auth = AuthType.REQUIRED)
public ModelAndView deleteIndex(User user, @RequestParam("id") long id) {

}

现在我尝试从拦截器获取 Controller 映射方法并获取该方法的注释。

Method method = RestRequestURLUtil.getInvokedMethod(handler, request);
Security security = method.getAnnotation(Security.class);
if(security.getAuth() == AuthType.REQUIRED) {
do some validate here
}

spring中有没有类似RestRequestURLUtil的类?

提前致谢:)

编辑:

web.xml

<servlet>
<servlet-name>rest</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/rest-servlet.xml,
/WEB-INF/interceptor-servlet.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>rest</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

拦截器服务器.xml

<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<bean class="com.test.web.interceptors.SecurityInterceptor" init-method="init">
...
</bean>
</mvc:interceptor>

最佳答案

可以通过框架应作为处理程序对象传递的 HandlerMethod 对象在拦截器中检查 Controller 方法上的注释。

if (handler instanceof HandlerMethod) {
HandlerMethod method = (HandlerMethod) handler;
if (method.getMethod().isAnnotationPresent(Security.class)) {
//do processing
}
}

但是,根据HandlerMethod javadoc中的spring文档,HandlerMethod类是在Spring 3.1中引入的。看来,在3.1之前的版本中,handler对象是一个Controller实例,这使得获取所调用的 Controller 方法的注释变得困难。

您可以升级到 3.1。并从 HandlerMethod 对象中获取注释,或者尝试解析 Controller 方法上的所有 RequestMapping 注释,然后尝试通过将 RequestMappings 与请求 URI 进行比较来确定调用了哪个方法。

如果无法升级,另一种选择是使用 AOP 而不是 mvc 拦截器。

关于spring mvc 从拦截器获取映射 Controller 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22931074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com