AOP,无法拦截controller下Seller*类

来源:12-8 AOP实现身份验证

Nnn_Lillian

2019-11-16

问题描述

在12-8中,无法访问到微信扫码登陆页面。

分析过程

核对后,因为代码与师兄是保持一致的,所以先排除了代码问题。

  1. 考虑是否token已经存在与cookie和redis中,在浏览器和rdm中检查,并无token。
  2. 考虑是否进入了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()方法。

  1. 考虑是否@Pointcut注解使用有误,将切入点设置为ServiceImpl下的Seller*类中方法。代码如下(与上一代码相比,我只更换了以下语句):
@Pointcut("execution(public * com.imooc.service.impl.Seller*.*(..))")

此时在运行之前写好的测试类:SellerServiceImplTest,该测试类中调用了Seller*Impl方法。断点进入doVerify()方法并且控制台中可打印出相应语句。

问题总结

我不知道是代码哪里出了问题,execution()中的文件夹等关键字由idea自提示逐步填写,不存在包名、文件夹名输入错误的原因。但就是无法拦截到目标类。

写回答

2回答

廖师兄

2019-11-17

类名写错了,肯定要改类名。。。不要去改@Pointcut

0
0

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.*(..))")

```

0
0

Spring Boot双版本(1.5/2.1) 打造企业级微信点餐系统

从0到1开发中小型企业级Java应用,并学会迭代重构技巧

6410 学习 · 5247 问题

查看课程