Java 如何从拦截器在Spring3.1MVC控制器上设置对象?
自从升级到3.1后,我遇到了一些与拦截器相关的问题。在3.0.x版和更早版本中,我使用以下模式拦截Spring MVC控制器:Java 如何从拦截器在Spring3.1MVC控制器上设置对象?,java,spring,spring-mvc,interceptor,Java,Spring,Spring Mvc,Interceptor,自从升级到3.1后,我遇到了一些与拦截器相关的问题。在3.0.x版和更早版本中,我使用以下模式拦截Spring MVC控制器: 创建一个名为RoleAware的接口,它定义一个或多个setter 让一个或多个控制器实现该接口 注册一个新的全局拦截器,该拦截器在预处理中执行“handler instanceof RoleAware”检查 如果拦截器是RoleWare的实例,则在实现控制器上设置一个或多个对象 第一个问题是3.1中发生了一些更改,因此instanceof检查失败。我通过在servle
HandlerMethod
,调用其getBean()
方法,并检查返回的bean是否是RoleAware
的实例
不过还没有测试过。您可以尝试使用调试器检查处理程序参数,看看它是什么,如果它既不是处理程序本身,也不是HandlerMethod。好问题,特别是因为处理程序参数的API文档说:“处理程序-选择要执行的处理程序,用于类型和/或实例评估”是的,我发现这是正确的,并通过测试确认。处理程序从控制器类更改为HandlerMethod包装类。虽然不太理想,但我现在必须在preHandle方法开始时将处理程序强制转换为handler方法进行检查,然后再次强制转换为接口,以便设置对象。