Spring 2.5中的拦截器

时间:2012-05-17 13:28:03

标签: java spring-mvc

我正在试图在Spring中使用拦截器,我需要在所有控制器上实现一个拦截器,以便在调用它们时处理特定的逻辑。

的web.xml:

<servlet>
    <servlet-name>MyApp</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/applicationContext.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>MyApp</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

的applicationContext.xml:

<bean id="handlerMapping"
      class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="warningInterceptor"/>
        </list>
    </property>
    <property name="mappings">
        <value>*.do</value>
    </property>
</bean>

<bean id="warningInterceptor" class="security.WarningInterceptor">
    <property name="activeApp" value="${myWarning}"/>
</bean>

Java类:WarningInterceptor

public class WarningInterceptor extends HandlerInterceptorAdapter {

private int activeApp;
public int getActiveApp() { return activeApp; }
public void setActiveApp(int activeApp) {this.activeApp = activeApp;}

public boolean preHandle(
        HttpServletRequest request,
        HttpServletResponse response,
        Object handler) throws Exception {

    if (getActiveApp() == 0) {
        return true;
    } else {
        response.sendRedirect("/myWarning.do");
        return false;
    }
}

当我启动MyApp时,我总是收到此错误:

  

org.springframework.beans.factory.BeanCreationException:在ServletContext资源[/WEB-INF/applicationContext.xml]中定义了名为'handlerMapping'的bean创建错误:bean的初始化失败;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为''的bean

2 个答案:

答案 0 :(得分:1)

SimpleUrlHandlerMapping的mappings属性应将URL映射到处理程序,并且只列出了URL模式。它应该是这样的:

 <property name="mappings">
    <props>
       <prop key="*.do">myAppController</prop>
     </props>
   </property>
编辑:这是一个更好的例子。这个使用值标签而不是prop(两种方式都可以)。

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
   <property name="mappings">
    <value>
       *.do=myAppController
    </value>
   </property>
</bean>

<bean id="myAppController" 
    class="com.example.MyAppController" />

答案 1 :(得分:0)

您是否尝试在拦截器中为activeApp变量添加getter / setter方法。 (WarningInterceptor)