0

我正在尝试 Spring MVC 3.0 中的 HandlerInterceptors。

下面是我的拦截器

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>

但是拦截器没有被调用。

如果我遗漏任何东西,请告诉我。

4

4 回答 4

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 对象可以作为 bean 添加到应用程序上下文中,覆盖默认的 HandlerAdapters。与 HandlerMappings 一样,可以为 HandlerAdapter 指定任何 bean 名称(它们经过测试按类型)。”

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

除非您使用 jackson(用于 json 支持),否则您可以尝试删除<mvc:annotation-driven/>并使用“ <context:annotation-config>”来代替自动装配等常见用途。

于 2012-11-08T00:15:14.807 回答
1

在我们的应用程序中,我们使用 double**来匹配任何服务子路径,因此请尝试更改它并检查它是否有帮助:

<mvc:mapping path="/services/**"/>
于 2012-05-23T14:51:38.090 回答
0

参考arviarya的上述帖子,配置 XML 中的 <mvc:annotation-driven /> 导致将不同的处理程序对象传递给拦截器。在我们的拦截器方法中,我们有:

@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:annotation-driven /> 的情况下使用@Controller 派生对象调用的,但在它存在时使用 HandlerMethod 派生对象调用。为了使我们的 if 块正常工作,我需要配置 XML 中的标签。

于 2013-09-17T22:53:38.693 回答
0

尝试使用 Jackson 配置 Spring MVC 和 JSON 中的建议。

把你的拦截器放在<mvc:interceptors>标签中

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

你可以保留<mvc:annotation-driven/> and <context:annotation-config>

于 2013-06-20T08:50:22.470 回答