用Arthas解决线上问题之获取请求(HttpServletRequest)
写在前面:写此篇文章意在用Arthas
的ognl
,所以不是最优的解决办法,故希望各位大神不要喷我。
前几天遇到这么一个问题:正式环境上一个接口请求,返回结果不是预期。
简化方法如下:
@RequestMapping("/test")
@ResponseBody
public String test() {
//获取cookie里的某个值,方法省略
String cookie = xxxx;
//调用service 处理cookie 返回一个结果
String result = xxxService.test(cookie);
return result ;
}
在没遇到Arthas
的时候,我很可能直接加上log,重新发版来查看cookie
的具体指
如果我们用Arthas
的 watch
查看test
这个方法的入参和返回值的话解话也获得不了cookie
的值,之前用Arthas
只是简单的用watch
,trace
等简单的功能。借此次机会正好学习一下比较屌的ognl
。
具体的命令:
watch -x 3 -n 1 org.springframework.web.servlet.DispatcherServlet doDispatch '@org.springframework.web.context.request.RequestContextHolder@currentRequestAttributes().getRequest().xxx()'
获取到HttpServletRequest
之后,那你想获取相关请求的内容就太容易了,上面代码中的xxx
各位就自由发挥吧。