Gateway添加切面类, 报错找不到servlet包

  • Post author:
  • Post category:其他




Gateway添加切面类, 报错找不到servlet包

在依赖包A中添加了一个切面类, 然后gateway添加依赖A. 启动时,gateway报错

在这里插入图片描述

看了很多资料, 大部分说都是

spring-boot-start-web

的冲突问题, 我的项目之前都是排除过web依赖冲突的. 就是因为加了一个切面类, 导致gateway启动失败了.

直接说答案:

    @Pointcut("execution(* com.central.*.controller.*.*(..))")
    public void test() {
    }

    @Before("test()")
    public void beforeMethod(JoinPoint joinPoint) {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (requestAttributes != null) {
            HttpServletRequest request = requestAttributes.getRequest();
            switchUri(request);
    }

当我拿到请求后, 封装了一个方法根据

request

拿到一些参数做逻辑处理.

    public void switchUri(HttpServletRequest request) {
       // 我的代码逻辑, 此处省略
	}



结论:



beforeMethod

这个方法拿到request请求后,

不能将request请求当做参数传递

, 否则会报找不到

servlet

的错误.

只能在原方法中做逻辑处理

    public void beforeMethod(JoinPoint joinPoint) {
        ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        if (requestAttributes != null) {
            HttpServletRequest request = requestAttributes.getRequest();
            // TODO 直接使用request, 不能当参数传递 
    }

个人猜测, 因该和spring的代理类有关, 具体原因没有验证, 不好定论.

希望没有人和我一样被坑了, 搞了一下午, 唉.



版权声明:本文为m0_51547144原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。