对特定bean的Inrecept请求

时间:2010-09-09 14:24:24

标签: java spring-mvc

我正在使用spring 3 mvc和使用基于注释的控制器开发webapp。我想定义一个拦截器,它将拦截对特定bean的请求,而不是所有拦截器。我怎么能这样做?

现在我使用以下配置,但它拦截了对所有bean的请求

 <bean id="annotationMapper" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
    <property name="interceptors">
        <list>
            <ref bean="sessionInterceptor"/>
        </list>
    </property>
</bean> 

<bean id="sessionInterceptor" class="app.interceptors.SessionCheckInterceptor"/>

谢谢!

3 个答案:

答案 0 :(得分:1)

在Spring 3中,您可以使用mvc namespace将拦截器绑定到特定的URL:

<mvc:interceptors>
    <mvc:interceptor>
        <bean class="app.interceptors.SessionCheckInterceptor" />
        <mvc:mapping path = "/somePath/**" />
    </mvc:interceptor>
</mvc:interceptors>

对于更复杂的情况,您也可以使用AOP拦截控制器方法调用。

答案 1 :(得分:1)

我认为拦截对bean的调用的最佳选择是使用Spring AOP

@Aspect
public class AroundExample {

  @Around("com.xyz.myapp.SystemArchitecture.businessService()")
  public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
    // start stopwatch
    Object retVal = pjp.proceed();
    // stop stopwatch
    return retVal;
  }
}

答案 2 :(得分:0)

我找到了一个使用springplugins项目的解决方案(http://code.google.com/p/springplugins/) 它定义了两个自己的映射器:

  • SelectedAnnotationHandlerMapping句柄仅定义了网址

  • IgnoreSelectedAnnotationHandlerMapping处理除定义之外的所有urs

如果您知道解决此问题的更好方法,那么欢迎您