Spring 启动 + Spring 安全性与 AspectJ 不工作

Spring boot + Spring security with AspectJ not working

我正在尝试使用 AspectJ 建议模式配置 spring 全局方法安全性,以便我可以在所有 @Configurable 注释的 class 中使用 @PreAuthorize 注释。这是我的 java 配置:

@Configuration
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, mode = AdviceMode.ASPECTJ)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration

和:

@EnableCaching
@SpringBootApplication
@EnableSpringConfigured
@EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
@EnableLoadTimeWeaving(aspectjWeaving = EnableLoadTimeWeaving.AspectJWeaving.ENABLED)
public class WebApplication extends WebMvcConfigurerAdapter 

这是我的 @Configurable class:

@Configurable
public class Entity {
    @PreAuthorize("hasPermission(this, 'publish')")
    public void method() { }
}

我还添加了 spring-security-aspects 作为依赖项。从 AspectJ 日志中,我可以清楚地看到 Spring 安全相关方面应用于我的 @Configurable classes 但是,一旦我创建这些 classes 的实例,我就会得到这个异常:

Post-processor tried to replace bean instance of type [com.example.Entity] with (proxy) object of type [com.sun.proxy.$Proxy130] - not supported for aspect-configured classes!

我正在使用 spring 引导版本 1.2.1 因此 spring 安全版本是 3.2.5。这似乎是这里讨论的错误:Spring Security AspectJMode with @EnableGlobalMethodSecurity not working

但是这个错误应该不会影响我的 spring 安全版本...这个问题有什么解决方法吗?

好的,我已经解决了这个问题。 spring 启动的 SecurityAutoConfiguration class 有问题。我不得不将其从自动配置中排除,并手动配置 spring 安全性 - 没什么大不了的,但无论如何......