自升级到3.1以来,我遇到了一些与拦截器相关的问题。在3.0.x及更早版本中,我使用以下模式拦截Spring MVC控制器:
第一个问题是3.1中的内容发生了变化,因此检查实例失败了。我已经通过在servlet上下文配置中使用新的显式元素来解决这个问题。与检查实例相比,这不是一个大问题,也不是一个更清洁的方法。
第二个问题是,当我尝试将处理程序(Controller)强制转换为RoleAware接口时,我得到一个ClassCastException。
我想要一个解决方案,使我能够继续在拦截的控制器上任意设置对象。例如,在截获的任何控制器上设置Role对象。另外,我想更多地了解3.1中导致这种情况发生变化的变化。
答案 0 :(得分:2)
使用RequestMappingHandlerMapping时,实际的处理程序是 HandlerMethod的实例,用于标识特定的控制器 将被调用的方法。
所以我猜你应该把处理程序转换为HandlerMethod
,调用它的getBean()
方法,并检查返回的bean是RoleAware
的实例。
虽未经过测试。您可以尝试使用调试器来检查处理程序参数,看看它既不是处理程序本身也不是HandlerMethod。