Tag: aspectj

如何使用AOP拦截File,FileReader,FileWriter,FileInputStream和FileOutputStream的构造函数?

我想拦截File,FileReader,FileWriter,FileInputStream和FileOutputStream的构造函数,并阻止任何文件名包含“..”(以防止路径遍历攻击)或“\ 0”(以防止文件名空字符攻击)。 我还有一个关于如何使用SecurityManager做同样事情的公开问题,但还没有人回答它,所以我希望这种替代方法能够起作用。 这是tomcat上的spring webapp。 我知道我可以手动执行此操作,方法是创建自己的SafeFile,SafeFileReader等类,然后修改代码以使用它们。 但是,我们的代码中有960个地方使用这些对象的构造函数,所以我宁愿避免这种情况,除非这是唯一的方法。

@ afterpectJ语句为“after():staticinitialization(*)”

我正在尝试使用实例化模型中的pertype实现跟踪方面。 通过这种方式,我将能够为每种类型的每个类使用一个记录器。 从我们的一些例子中我可以找到这个代码来初始化记录器: public abstract aspect TraceAspect pertypewithin(com.something.*) { abstract pointcut traced(); after() : staticinitialization(*) { logger = Logger.getLogger(getWithinTypeName()); } before() : traced() { logger.log(…); } //…. } 不幸的是,我无法将其完全转换为@AspectJ语法(这是我控制之外的项目要求),尤其是我需要设置记录器的部分,只执行一次该代码。 这可能吗? 谢谢,

我们可以根据任何标志的值或通过配置文件启用或禁用Aspect吗?

我在pom.xml中添加了以下依赖项 org.springframework spring-aop ${spring.version} org.aspectj aspectjrt 1.8.5 org.aspectj aspectjweaver 1.8.5 并在appContext.xml中启用AspectJ,如下所示: 并定义方面如下: @Component @Aspect public class AuthenticationServiceAspect { @Before(“execution(* com.service.impl.AuthenticationServiceImpl.*(..))”) public void adviceMethod(JoinPoint joinPoint) { if(true){ throw new Exception(); } } 现在我想禁用这个AOP,以便上面的代码不会被执行? 我怎样才能做到这一点?

用弹簧编织/加载时间编织

文档解释说,LTW必须通过使用 xml指令或使用@EnableLoadTimeWeaving注释来@EnableLoadTimeWeaving 。 但是,我没有做过,但我仍然看到在我的项目中正确编织了方面! 在这种情况下,我不认为它们是在编译时编织的(但它们是吗?),所以它肯定是加载时间编织的? 即使是这种情况,它如何自动选择在加载时间内编织方面? 如果没有像文档所说的那样使用上述方法之一打开这些方面,那么这些方面是否应该保持不变? 我在我的类路径中有了aspectj-weaver,但是这还不足以选择这些编织类型中的任何一种,是吗?

Java方面的同步和性能

我刚刚意识到我需要在一个方面同步大量的数据收集代码,但性能是一个真正的问题。 如果性能下降太多,我的工具将被抛弃。 我将单独编写int和long,以及各种数组,ArrayLists和Maps。 将有一个应用程序的多个线程将进行将由我的方面拾取的函数调用。 我应该注意哪些事情会对性能产生负面影响? 什么代码模式更有效? 特别是我有一种方法可以调用许多其他数据记录方法: void foo() { bar(); woz(); … } 这些方法主要是添加方面字段的递增 void bar() { f++; // f is a field of the aspect for (int i = 0; i < ary.length; i++) { // get some values from aspect point cut if (some condiction) { ary[i] += someValue; // ary a […]

Spring Boot,使用@Configurable和加载时间编织将@Autowire转换为非托管类

我有一组非托管类,我在Spring之外实例化。 我一直在尝试使用Spring AOP加载时间编织到@Autowire一个bean进入这些类但到目前为止没有运气。 我一直在使用Tomcat 8和Spring Boot 1.2.0进行测试。 我尝试设置类的@Configuration看起来像这样: @Configuration @PropertySource(“classpath:application.properties”) @EnableSpringConfigured @EnableLoadTimeWeaving public class Config 在Config我将我想要@Auotwire的bean定义到我的非托管类中: @Bean public StateProvider stateProvider() { //setup bean return new DynamoStateProviderImpl( ); } 非托管bean看起来像这样: @Configurable(autowire = Autowire.BY_TYPE, dependencyCheck = true, preConstruction = true) public class StateOutput implements UnifiedOutput { @Autowired private StateProvider stateProvider; 我的pom内有以下deps org.springframework spring-agent 2.5.6.SEC03 org.springframework spring-tx org.springframework […]

什么是覆盖参数的AspectJ声明性语法

之前已经使用注释语法对此进行了回答: Aspectj覆盖方法的参数 但我无法弄清楚如何使用AspectJ声明性语法。 以下应该在方法中的每个字符串前添加“Poop”,但它不会。 public aspect UserInputSanitizerAdvisor { pointcut unSafeString() : execution(@RequestMapping * * (..)); Object around() : unSafeString() { //thisJoinPoint.getArgs(); //proceed(); System.out.println(“I’m Around”); Object[] args = thisJoinPoint.getArgs(); if (args != null) { for (int i = 0; i < args.length; i++) { Object o = args[i]; if (o != null && o instanceof String) […]

如何在Spring 3中将@Aspect与@Controller结合起来?

我正在尝试使用@Controller,基于注释的方法设置Spring 3 Web MVC项目。 package my.package @Controller @RequestMapping(“/admin/*”) public class AdminMultiActionController { @RequestMapping(value = “admin.htm”, method = RequestMethod.GET) public String showAdminSection() { return “admin”; } 我的dispatcher-servlet具有以下Controller处理程序: 使用提供的maven工件,webapp运行良好: org.springframework spring-webmvc 3.0.2.RELEASE 现在我想添加@AspectJ AOP。 我得到了libs: org.aspectj aspectjweaver 1.6.9 org.aspectj aspectjrt 1.6.9 添加到我的applicationContext.xml: 确保在applicationContext.xml中创建相关的bean: 并开始充实@Aspect: package my.package.service @Aspect public class SecurityInterceptor { @Pointcut(“execution(* showAdminSection(..))”)// the pointcut expression private […]

AspectJ + Junit + Maven – 在测试中识别切入点但NoSuchMethodError:aspectOf()exception抛出

我已经在这里跟踪了几乎所有的JUnit + Maven + AspectJ问题,甚至我很确定我已经正确设置了一切,我无法测试它。 我有一个Maven模块只有一个方面: @Aspect public class AssertionAspect { @Pointcut(“execution(@org.junit.Test * *())”) public void testMethodEntryPoint() {} @Before(“testMethodEntryPoint()”) public void executeBeforeEnteringTestMethod() { System.out.println(“EXECUTE ACTION BEFORE ENTERING TEST METHOD”); } @After(“testMethodEntryPoint()”) public void executeAfterEnteringTestMethod() { System.out.println(“EXECUTE ACTION AFTER ENTERING TEST METHOD”); } } 非常简单。 我想要做的就是在我的测试项目中每次执行任何测试方法之前和之后做一些事情,该项目用@Test注释。 现在,我在我的使用了aspectj-maven-plugin ,如下所示: org.codehaus.mojo aspectj-maven-plugin 1.4 my.package with-aspects 1.6 1.6 test-compile […]

为什么Spring AOP不会在运行时编织外部jar?

我有一个基于Spring 3的java应用程序构建。这个项目有另一个jar作为依赖。 此依赖项包含@org.aspectj.lang.annotation.Aspect类(例如, com.aspectprovider.aspects.MyAspect )。 有一个@Before建议从实现接口Foo类编织一个方法。 就像是: @Before(“execution(* com.project.Foo.save(..))”) Foo接口可以在“项目”内或在另一个jar中。 这个例子没关系。 我的项目包含实现Foo类。 当然,那些是我希望它编织的类。 My Spring应用程序上下文配置文件( applicationContext.xml )包含以下行: 我还将方面声明为bean,并注入一些属性: 通过日志记录,我可以看到MyAspect已实例化并且属性已注入。 但方法保存不被截获。 这就是问题。 如果我将方面类从jar复制到具有Spring的应用程序,它可以工作。 当这些方面包含在外部jar中时,方法save不会被截获。 有什么线索吗? 编辑:我如何调用Foo的保存方法: //in a JSF managed bean @Inject private Foo myFoo; //there’s a implementation of Foo in a package that spring is looking at. So it is injected correctly. public String someAction() […]