当前位置: 首页 > 知识库问答 >
问题:

Aspectj和Spring Security方面-建议执行顺序

暨弘懿
2023-03-14

我使用的是aspectj的weaving而不是SpringAOP,因此我的aspectj maven插件如下所示:

           <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>aspectj-maven-plugin</artifactId>
                <version>1.6</version>
                <executions>
                    <execution>                     
                    <goals>
                        <goal>compile</goal>
                        <goal>test-compile</goal>
                    </goals>
                    </execution>
                </executions>
                <configuration>
                    <Xlint>ignore</Xlint>
                    <showWeaveInfo>true</showWeaveInfo>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <complianceLevel>${org.aspectj-version}</complianceLevel>
                    <aspectLibraries>
                        <aspectLibrary>
                            <groupId>org.springframework.security</groupId>
                            <artifactId>spring-security-aspects</artifactId>
                        </aspectLibrary>
                    </aspectLibraries>
          </plugin>

我还有另一个方面看起来是这样的:

package com.mycompany.fw.app.config;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.DeclarePrecedence;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.ParameterNameDiscoverer;
import org.springframework.security.core.parameters.DefaultSecurityParameterNameDiscoverer;

import com.mycompany.fw.security.Integration;

@Aspect
@DeclarePrecedence("IntegrationAspects*,*")
public class IntegrationAspects {

    ParameterNameDiscoverer parameterNameDiscoverer = new DefaultSecurityParameterNameDiscoverer();

    @Pointcut("(execution(* com.mycompany..*(..))) && @annotation(integrate) ")
    public void integratePointCut(Integration integrate) {

    }

    /**
     * TODO: cache
     * 
     * @param jp
     * @param integrate
     * @throws Throwable
     */
    @Around("integratePointCut(integrate)")
    public Object integrate(final ProceedingJoinPoint pjp, Integration integrate) throws Throwable {
        Object res = pjp.proceed();
        return res;
    }

}

我需要的是把上面的(集成方面)放在任何其他方面(包括Spring的安全方面)之前,正如您所看到的,我用@declareprection尝试过(我也用declare precence:integrationAspects*,*在.aj文件中尝试过),不幸的是,没有成功。

共有1个答案

裴意
2023-03-14

问题是您没有在@declarePrection中使用简单的方面名称IntegrationAspects,而是使用了一个开玩笑的字符*。在这种情况下,您需要使用一个完全限定的类名或创建相同的jokers。

不工作:

@DeclarePrecedence("IntegrationAspects*, *")

作品:

@DeclarePrecedence("IntegrationAspects, *")
@DeclarePrecedence("com.mycompany.fw.security.Integration.IntegrationAspects, *")
@DeclarePrecedence("com.mycompany.fw.security.Integration.IntegrationAspects*, *")
@DeclarePrecedence("*..IntegrationAspects*, *")
 类似资料:
  • 我的建议是正确执行并预先准备正确的操作,除了执行两次。我希望它只执行一次。应该触发通知的方法只执行一次,因为startTestSuite标题只在日志中打印一次。bean和上下文是在TestNG类中生成的。我尝试在initSpring()方法上使用@beforeClass和@beforeSuite标记运行它,结果相同。 进一步的上下文:这样做的目的是获取测试套件何时开始和结束的时间戳,以及各个测试何

  • 我已经用原始切入点和建议方法编写了简单方面: 我有以下基于Spring注释的应用程序配置: 和com中的实用程序类。mtag。util包: 但是当我打电话的时候 在单元测试中,我可以看到方法调用没有被拦截,我的@AfterResning建议不起作用。 但如果我将someMethod()类型更改为实例(非静态)方法,则切入点为 通过添加@Component注释和调用目标metod来管理Spring的

  • 当我设置Spring Ashej加载时间编织并通过关键字创建一个实例时,如下所示(下图)。事实证明,我无法访问构造函数中的依赖项。正如预期的那样,这一切都很好。执行顺序是 。现在,我可以访问构造函数中的依赖项。但问题是执行顺序:

  • 问题内容: 我有一个抽象基类,用作我的单元测试(TestNG 5.10)的基础。在该类中,我将初始化测试的整个环境,设置数据库映射等。此抽象类具有一个带有注释的方法,该方法可以进行初始化。 接下来,我用具有方法和方法的特定类扩展该类。这些方法对环境进行类特定的初始化(例如,将一些记录放入数据库中)。 如何执行带注释的方法的特定顺序?我需要先执行抽象基类中的那些,然后再执行扩展类中的那些。 例: 预

  • 本文向大家介绍setTimeout和Promise的执行顺序?相关面试题,主要包含被问及setTimeout和Promise的执行顺序?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 首先我们来看这样一道题: 输出答案为2 10 3 5 4 1 要先弄清楚settimeout(fun,0)何时执行,promise何时执行,then何时执行 settimeout这种异步操作的回调,只有主线程

  • 我正在使用SpringAOP创建一个方面。我定义的方面将执行两次。我似乎不明白为什么。我非常感谢任何人对这个问题的意见。 谢谢 //Spring配置 //建议 //建议的方法 //输出 //编辑1:添加了更多的spring配置信息。根本不使用任何Spring AOP注释。我附加了一个调试器,看到aspect/log语句也被执行了两次。所以我怀疑它是否与日志语句打印字符串两次有关。