简介

        本文介绍SpringBoot如何在任意地方获取HttpServletRequest。

        此法可以用在请求链中的任意地方,比如:Controller、Service、非Bean对象。

法1:getRequestAttributes(推荐)

用法

ServletRequestAttributes servletRequestAttributes =  
(ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();

说明

它可以让新建的子线程也获取到attribute,方法是:

RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(), true);

法2:currentRequestAttributes

ServletRequestAttributes servletRequestAttributes =  
(ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();

线程安全性

是线程安全的。