有一个接口HandlerInterceptorAdapter
,它可以被实现来拦截Spring MVC请求。Spring也在HandlerInterceptorAdapter
中提供了抽象实现,因此您可以扩展它并覆盖您需要的任何方法。从您的描述中看来,您只需要覆盖preHandle
和postHandle
方法。您可以查看this帖子以获取更多示例。以下是您可以使用任何方便的锁定策略来实现所需功能的方法;
public class CustomInterceptor extends HandlerInterceptorAdapter {
private final Semaphore semaphore;
private final long waitTime;
public CustomInterceptor() {
semaphore = new Semaphore(5);
waitTime = 10;
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
try {
boolean acquired = semaphore.tryAcquire(1, waitTime, TimeUnit.SECONDS);
if (!acquired) {
}
} catch (InterruptedException e) {
return false;
}
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
semaphore.release();
super.postHandle(request, response, handler, modelAndView);
}
}
然后在Spring XML或Java配置中实例化,并将其注入到SimpleUrlHandlerMapping
的拦截器属性中,如下所示;
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/welcome">welcomeController</prop>
</props>
</property>
<property name="interceptors">
<list>
<ref bean="customInterceptor" />
</list>
</property>
</bean>
<bean id="customInterceptor" class="com.common.mvc.interceptors.CustomInterceptor" />
提示:尚未测试代码,但您应该能够了解基本思路。