AOP,无法拦截controller下Seller*类
来源:12-8 AOP实现身份验证
Nnn_Lillian
2019-11-16
问题描述
在12-8中,无法访问到微信扫码登陆页面。
分析过程
核对后,因为代码与师兄是保持一致的,所以先排除了代码问题。
- 考虑是否token已经存在与cookie和redis中,在浏览器和rdm中检查,并无token。
- 考虑是否进入了
doVerify()
方法。将doVerify()
中内容换为System.out.println
。代码如下:
@Aspect
@Component
@Slf4j
public class SellerAuthorizeAspect {
@Autowired
private StringRedisTemplate redisTemplate;
@Pointcut("execution(public * com.imooc.controller.Seller*.*(..))" +
"&& !execution(public * com.imooc.controller.SellerUserController.*(..))")
public void verify() {}
@Before("verify()")
public void doVerify() {
System.out.println("###doVerity");
}
}
更改完后,运行程序,访问 url: /sell/seller/order/list。控制台中并没有打印出###doVerity
。设置断点后发现不会进入doVerify()
方法。
- 考虑是否
@Pointcut
注解使用有误,将切入点设置为ServiceImpl
下的Seller*
类中方法。代码如下(与上一代码相比,我只更换了以下语句):
@Pointcut("execution(public * com.imooc.service.impl.Seller*.*(..))")
此时在运行之前写好的测试类:SellerServiceImplTest
,该测试类中调用了Seller*Impl
方法。断点进入doVerify()
方法并且控制台中可打印出相应语句。
问题总结
我不知道是代码哪里出了问题,execution()
中的文件夹等关键字由idea自提示逐步填写,不存在包名、文件夹名输入错误的原因。但就是无法拦截到目标类。
写回答
2回答
-
类名写错了,肯定要改类名。。。不要去改@Pointcut
00 -
Nnn_Lillian
提问者
2019-11-16
解决了,问题就是:文件夹名称不统一
这个路径/sell/seller/order/list的实现是在SellerOrderContronller类中,但是我把这个类写成了SellOrderContronller。少了那个er,所以拦截不到。所以要么改这个类名,要么把`@Pointcut`改成:
```
@Pointcut("execution(public * com.imooc.controller.Sell*.*(..))" +
"&& !execution(public * com.imooc.controller.SellerUserController.*(..))")```
00
相似问题