【问题标题】:How does the double-dot ".." syntax work in AspectJ?双点“..”语法在 AspectJ 中是如何工作的?
【发布时间】:2021-12-13 03:45:21
【问题描述】:

我需要让这个 aop 方面工作,但我总是得到错误 404,我需要知道这个点是否,在控制器正确之后。 了解这些点是如何工作的,以访问控制器。

如果可以解释点的工作原理。

<aop:aspect ref="permissionInterceptor">
  <aop:around
    method="invoke"
    pointcut="execution(* com.teste1.teste2.web.controller..*())
      and @annotation(com.teste1.ae.client.security.Permission)"
  />
</aop:aspect>

【问题讨论】:

  • 欢迎来到 SO。我修复了您的内联图像链接,修改了主题以更好地解释您真正想知道的内容,并使 XML 更具可读性。请学习如何更好地格式化您自己的帖子,学习语法帮助。关于你的问题,我同意 R.G 你应该提供一个MCVE。这样的切入点看起来是正确的,因此问题一定在您的项目配置或代码中的其他地方。

标签: java spring aop aspectj


【解决方案1】:
execution(* com.teste1.teste2.web.controller..*())

意味着 - 执行com.teste1.teste2.web.controller 包或其子包之一中定义的任何方法

.. 是一个特殊的通配符,表示可以匹配任意数量的参数。在执行切入点的上下文中,它将是当前包或它的任何子包。

Spring 文档参考:Examples

而 (..) 匹配任意数量(零个或多个)的参数。

.. 的表达式可以工作。您可以验证从表达式中删除 and @annotation(com.teste1.ae.client.security.Permission) 部分时是否建议控制器方法。如果请求仍然是 404 ,请分享 MCVE 或 Aspect 代码以进一步了解逻辑。

【讨论】:

  • 如果我从控制器方法中删除权限,它可以工作,但如果我输入,我会收到错误 404
  • @johnycampos 当 @Permission 从控制器方法中删除时,表达式 execution(* com.teste1.teste2.web.controller..*()) and @annotation(com.teste1.ae.client.security.Permission) 将与这些方法不匹配,并且不会发生任何建议。如果流程按预期工作,我的猜测是应该审查通知方法中与 Permission 相关的逻辑。
猜你喜欢
  • 2017-06-17
  • 1970-01-01
  • 2020-02-22
  • 2021-06-15
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
相关资源
最近更新 更多