【问题标题】:How do I intercept a request in Spring AOP/Aspectj before any bean/controller is called?如何在调用任何 bean/控制器之前拦截 Spring AOP/Aspectj 中的请求?
【发布时间】:2012-10-02 20:13:04
【问题描述】:

在调用任何 bean/控制器方法之前,我必须记录请求参数/表单数据。 我的应用程序是用 Spring Web Flow 编写的。

实现它的最佳方式是什么?

【问题讨论】:

  • 请详细说明您的问题。你试过什么了?否则,您的问题可能看起来像投票/没有建设性。

标签: spring jakarta-ee spring-webflow


【解决方案1】:

我认为 Spring AOP 可以帮助你。

定义一个选择所有控制器方法的切入点表达式并使用 @Before 建议来记录参数

例子:

@Before("execution(@controllers.package * *(..))")
public void logArguments(JoinPoint joinPoint) throws Throwable {
    logger.debug("Entering method - Arguments : " + joinPoint.getArgs());
}

【讨论】:

    【解决方案2】:

    如果需要在到达控制器之前拦截每个请求,可以使用拦截器。您必须使用 HandlerInterceptorAdapter 扩展您的类。您可以覆盖它的 preHandle 方法以在每个请求到达控制器之前拦截它。您将在此方法中访问请求和响应对象以更改您的目标页面或 url。

    【讨论】:

      【解决方案3】:

      您不需要 AOP/Aspectj,您可以使用 Servlet Filter 来做到这一点

      【讨论】:

      • 那么我们可以用纯 JSP/Servlet 做任何事情 :)
      • Struts、Spring MVC、Spring Security 等都是建立在纯 Servlet 框架之上的。您可以检查 Spring 安全代码,了解如何使用过滤器拦截调用。 AOP 或者 Servlet Filters,你根据问题来选择。
      • 正是我的观点。如果我们想编写纯 JSP/Servlet,那么我们可以做任何事情,而不需要 Spring。作者正在询问如何使用 Spring 来做到这一点。
      • 好吧,我想说的是,如果你使用的是Spring,并不意味着你必须使用AOP。 7年前的问题,很多东西都有改善,检查stackoverflow.com/questions/33744875/…
      猜你喜欢
      • 1970-01-01
      • 2016-05-15
      • 1970-01-01
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-09
      相关资源
      最近更新 更多