Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带有Spring安全性的AspectJ_Java_Spring_Spring Mvc_Spring Security_Aspectj - Fatal编程技术网

Java 带有Spring安全性的AspectJ

Java 带有Spring安全性的AspectJ,java,spring,spring-mvc,spring-security,aspectj,Java,Spring,Spring Mvc,Spring Security,Aspectj,我有这个注释和一个方面类 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface AroundHere { } @Aspect @Component public class SomeAspect { @Around("@annotation(com.annotation.AroundHere)") public Object redirectIfNotEditingSt

我有这个注释和一个方面类

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface AroundHere {
}

@Aspect
@Component
public class SomeAspect {
    @Around("@annotation(com.annotation.AroundHere)")
    public Object redirectIfNotEditingStatus(ProceedingJoinPoint pjp) throws Throwable {

        System.out.println("hi");

        return pjp.proceed();
    }
}
我想在一些有
@AroundHere
注释的方法上打印“hi”。它在服务层上运行良好,但在控制器上不起作用。我怀疑Spring Security,因为它扫描所有控制器组件


我如何让它们在控制器上工作

很可能它对您不起作用,因为
aop:aspectj autoproxy
是在一个应用程序上下文中定义的,并且您的控制器位于不同的应用程序上下文中。通常,
BeanFactoryProcessors
(当
aop:aspectj autoproxy
在上下文中时执行实际工作)只作用于定义它们的容器中的bean。因此,例如,如果您在根应用程序上下文中定义了
aspectj autoproxy
,它将不会作用于
*-servlet.xml
上下文中定义的bean

您可以找到与此主题相关的文档:

BeanPostProcessor的作用域为每个容器。这仅在使用容器层次结构时才相关。如果在一个容器中定义BeanPostProcessor,它将只对该容器中的bean进行后期处理。换句话说,一个容器中定义的bean不会被另一个容器中定义的BeanPostProcessor后处理,即使两个容器都是同一层次结构的一部分


也许控制器是在web上下文定义中定义的,而您的服务(以及您的方面)是在应用程序上下文中定义的?正如@micha所说,很可能它对您不起作用,因为
aop:aspectj autoproxy
是在一个应用程序上下文中定义的,而您的控制器在不同的应用程序上下文中。通常,
BeanFactoryProcessors
(当
aop:aspectj autoproxy
在上下文中时执行实际工作)只作用于定义它们的容器中的bean。因此,例如,如果在根应用程序上下文中定义了
aspectj autoproxy
,它将不会作用于在*-servlet.xml上下文中定义的bean。另一个原因可能是服务通常实现一个接口,而控制器不实现。SpringAOP需要一个bean来实现一个接口。@andrestefan哇,你们说得对极了。请把它们写在答题表上,这样我可以给你一些分数。谢谢