因为springCloud的gateWay跟springboot的web存在冲突所以没办法用传统的方式获取header
一、传统方式:
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
正常有spring-boot-starter-web依赖的包都可以使用上面的方式获取HttpServletRequest
二、gateWay获取
1.在需要使用切面的controller的入参上增加参数 ServerWebExchange这个参数不需要传递参数
@GetMapping("/test")
public void test(ServerWebExchange exchange){
System.out.println("测试");
}
2.在自定义切面上获取这个参数(只能使用@Around获取)
@Around("test()")
public Object around(ProceedingJoinPoint point) throws Throwable {
for (Object obj : point.getArgs()){
if (obj instanceof ServerWebExchange){
ServerWebExchange t = (ServerWebExchange) obj;
String data = t.getRequest().getHeaders().getFirst("test");
System.out.println(data);
}
}
return point.proceed();
}