我正在使用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"/>
谢谢!
答案 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
如果您知道解决此问题的更好方法,那么欢迎您