SpringMVC中获取HttpServletRequest
https://www.cnblogs.com/redos/p/14945483.html
方式一
使用@Autowired或者写在Controller的处理方法中,Spring容器会帮忙注入
@Controller public class HelloController { @Autowired private HttpServletRequest request; //$Proxy36@5861 @GetMapping("index") public String index(HttpServletRequest request1) { // RequestFacade@5861 Map<String, String[]> parameterMap = request.getParameterMap(); return "index"; } }
方式二
使用RequestContextListener监听器,RequestContextListener实现ServletRequestListener监听器接口,该监听器监听HTTP请求事件,web服务器接收的每一次请求都会通知该监听器。
在web.xml中配置:
<listener> <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class> </listener>
HttpServletRequest request2 = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); // RequestFacade@5861
方式三
1、使用ThreadLocal来存放当前线程的HttpServletRequest
public class UserContext { /** * Servlet容器为每个Http请求分配一个工作线程,把每个用户的请求保存到自己的线程中 */ private static ThreadLocal<HttpServletRequest> tl = new ThreadLocal<>(); public static void set(HttpServletRequest request) { tl.set(request); } public static HttpServletRequest get() { return tl.get(); } }
2、配置拦截器,将用户的请求保存到ThreadLocal中
public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 请求保存请求到当前线程中 UserContext.set(request); } ..... }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能