AspectJ双点..语法工作原理及切入点配置正确性咨询
AspectJ切点双点..语法解释
你配置中execution(* com.teste1.teste2.web.controller..*())里的..是AspectJ切点表达式的标准语法,作用为:
- 匹配
com.teste1.teste2.web.controller当前包下的所有类的所有方法 - 同时匹配
com.teste1.teste2.web.controller下所有层级子包的所有类的所有方法
如果替换为单.,仅会匹配controller包直接下级的类方法,不会递归匹配子包内容,你当前的双点写法本身语法合法,不是导致404的直接原因。
你当前AOP配置的生效范围
你贴的配置写法没有语法错误:
<aop:aspect ref="permissionInterceptor"> <aop:around method="invoke" pointcut="execution(* com.teste1.teste2.web.controller..*()) and @annotation(com.teste1.ae.client.security.Permission)" /> </aop:aspect>
只要同时满足两个条件的方法就会被权限拦截器拦截:
- 方法所属的类在
com.teste1.teste2.web.controller包或者其任意子包下 - 方法上标注了
com.teste1.ae.client.security.Permission注解
404问题排查建议
- 确认你要拦截的Controller类是否在
com.teste1.teste2.web.controller包/子包下,路径不匹配的话切面不会拦截,可能触发权限校验失败返回404 - 确认目标方法上是否添加了指定的
@Permission注解,漏加注解不会进入切面逻辑 - 排查
permissionInterceptor的invoke方法逻辑,是否有权限校验不通过直接设置404响应的分支,多数情况下404是切面校验逻辑触发的返回结果
内容的提问来源于stack exchange,提问作者johny campos
相关产品推荐
相关产品推荐

