2012-05-23 31 views
0

我试着从Spring MVC 3.0 HandlerInterceptors。春天3.0 MVC处理程序拦截器不工作

下面是我的拦截

public class SessionInterceptor extends HandlerInterceptorAdapter { 

    @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
     System.out.println("inside preHandle"); 
     if(request.getSession().getAttribute(SessionConsta nts.USER_SESSION_NAME) == null) { 
     response.sendRedirect("welcome"); 
     return false; 
     } 
     return true; 
    } 
} 

下面是我的配置在我的XML

<mvc:annotation-driven/> 

<mvc:interceptors> 
<mvc:interceptor> 
<mvc:mapping path="/services/*"/> 
<bean class="com.ca.myca.interceptors.SessionInterceptor " /> 
</mvc:interceptor> 
</mvc:interceptors> 

但拦截器是没有得到调用。

请让我知道我是否缺少任何东西。

回答

1

在我们的应用中,我们采用双**任何服务的子路径匹配,所以尝试改变它,并检查是否有帮助:

<mvc:mapping path="/services/**"/> 
+0

我试过了,但还是不行。但是,如果我以下面的方式使用.. ...拦截器正在为所有请求调用。但我想限制它到一些特定的请求。 – gnreddy

+0

'/ services'部分 - 是您应用程序的上下文吗?因为你不必在拦截器映射中指定它。在映射路径中,您只需将表达式放入控制器请求映射值 - @RequestMapping(value =“...”)' – Laimoncijus

+0

我的上下文路径是myca。我在我的控制器类的@Controller注释中提到了“/ services”。我在控制器 – gnreddy

1

您正在使用<mvc:annotation-driven/>与MVC拦截。

请Spring参考检查:

http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/servlet/DispatcherServlet.html

“当一个Java 5+环境中运行,默认AnnotationMethodHandlerAdapter上会被注册,以及对象的HandlerAdapter可以添加在应用程序上下文豆。 ,覆盖默认的HandlerAdapter。与HandlerMappings类似,HandlerAdapter可以被赋予任何bean名称(它们按类型进行测试)。“

<mvc:annotation-driven/>应该用于注解驱动MVC控制器像@RequestMapping,@Controller等,但我所看到的没有必要界定“<mvc:annotation-driven/>”为支持它。

除非你使用杰克逊(支持JSON),你可以尝试删除<mvc:annotation-driven/>并使用“<context:annotation-config>”,而不是像自动装配等常用

0

尝试什么建议在Configuration of Spring MVC and JSON using Jackson

把你<mvc:interceptors>标签

<mvc:interceptors> 
    <bean class="xx.x..x..x...UserSessionInterceptor" /> 
</mvc:interceptors> 

拦截器,你可以保持<mvc:annotation-driven/> and <context:annotation-config>

0

在参考上述post通过arviarya,< MVC:注解驱动的XML配置导致不同/ > handler被传递给拦截器的对象。在我们的拦截器方法,我们有:

@Override 
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mav) throws Exception { 
    if (mav != null && handler instanceof HandlerMethod) { 
     // something we want to have happen 
    } 

这是被称为与没有< MVC中的@控制派生的对象:注解驱动/ >,但被称为与HandlerMethod-derivedobject当它存在。对于我们的if块的工作,我需要在我们的配置XML中的标签。