Shiro与SpringAOP冲突导致无法请求到Controller

kyaa111 1年前 ⋅ 291 阅读

各依赖版本

org.crazycake:shiro-redis-spring-boot-starter:3.2.1

org.springframework.boot:spring-boot-starter-aop:2.3.0.RELEASE

有个配置如下

@Bean
public static DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator() {
    return new DefaultAdvisorAutoProxyCreator();
}

这玩意会导致aop失效, 究极神坑.

如果你使用aspectj对controller进行了增强,那么定义的接口会无法访问,全部404

需要加上这个

defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);

setProxyTargetClass方法注释如下

设置是否直接代理目标类,而不仅仅是代理特定的接口。默认值为“false”。 将其设置为“true”以强制为TargetSource公开的目标类进行代理。

如果该目标类是一个接口,则会为给定的接口创建一个JDK代理。

如果该目标类是任何其他类,则会为给定的类创建一个CGLIB代理。 注意:根据具体代理工厂的配置,如果没有指定接口(并且未激活接口自动检测),则代理目标类行为也将被应用。

ref: https://blog.csdn.net/qq_33306246/article/details/106573462