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 版权协议,转载请附上原文出处链接和本声明。