【问题标题】:How to create an interceptor for annotation @Controller如何为注解@Controller创建拦截器
【发布时间】:2012-06-29 10:12:50
【问题描述】:

我加入了一个现有的项目,该项目使用 spring mvc 的 2 种前端机制:

  • A) 控制器类扩展 org.springframework.web.servlet.mvc.SimpleFormController
  • B) 控制器类使用注解@Controller。

现在我找到了一个拦截器:

@Aspect
public class RequestMonitor {

    @Autowired
    private RequestMonitorService requestMonitorService;

    @Before("execution(* org.springframework.web.servlet.mvc.Controller+.handleRequest(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse))"
            + "&& args(request,response)")
    public void storeUserAccess(HttpServletRequest request, HttpServletResponse response) {
        requestMonitorService.storeUserAccess(request);
    }
}

谁捕获来自 org.springframework.web.servlet.mvc.Controller 的所有请求(机制 A)

如何适应拦截所有其他带有注释“@Controller”的控制器:org.springframework.stereotype.Controller(机制B)

【问题讨论】:

    标签: spring-mvc aspectj interceptor spring2.x


    【解决方案1】:

    你有 HandlerInterceptorAdapter 类。您可以扩展它并使用子类中的方法:

    public boolean preHandle(HttpServletRequest request, 
            HttpServletResponse response, Object handler) throws Exception
    
    public void postHandle(
            HttpServletRequest request, HttpServletResponse response, 
            Object handler, ModelAndView modelAndView)
            throws Exception
    

    你需要注册你的拦截器,即:

    <mvc:interceptors>
            <bean class="my.fully.qualified.package.RequestInterceptor" />
    </mvc:interceptors>
    

    【讨论】:

    • 我们使用 Spring 2.5 而不是 3 :(
    猜你喜欢
    • 2011-07-03
    • 1970-01-01
    • 2014-09-30
    • 2014-04-05
    • 2011-08-04
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    相关资源
    最近更新 更多