spring boot在普通方法中获取HttpServletRequest及其使用的方式

张开发
2026/4/16 12:02:56 15 分钟阅读

分享文章

spring boot在普通方法中获取HttpServletRequest及其使用的方式
一、通过RequestContextHolder来获取HttpServletRequest示例代码如下public static AuthUser getUser(){ RequestAttributes requestAttributes RequestContextHolder.getRequestAttributes(); ServletRequestAttributes servletRequestAttributes(ServletRequestAttributes)requestAttributes; //获取http请求这步是关键 HttpServletRequest httpServletRequest servletRequestAttributes.getRequest(); //从请求属性中获取 Object user httpServletRequest.getAttribute(SYSTEM_CURRENT_USER); if(user!null){ return (AuthUser) user; } //从请求头获取 String tokenhttpServletRequest.getHeader(TP-Auth); if(StringUtils.isBlank(token)){ return new AuthUser(); } //如果不存在则从token中进行解析 MapString, Object tokenMapJwtUtil.getTokenInform(token); AuthUser authUserAuthUser.builder().userId(Long.valueOf(tokenMap.get(userId).toString())) .userName(tokenMap.get(userName).toString()) .userAccount(tokenMap.get(userAccount).toString()) .userType(Integer.valueOf(tokenMap.get(userType).toString())) .deptIds(tokenMap.get(userDeptIds).toString()) .roleIds(tokenMap.get(userRoleIds).toString()) .postIds(tokenMap.get(userPostIds).toString()) .tenantId(Long.valueOf(httpServletRequest.getHeader(tenantId))) .build(); return authUser; }二、关于自定义线程获取失败的问题需要手动获取一下示例程序如下//获取主线程的上下文 RequestAttributes context RequestContextHolder.getRequestAttributes(); new Thread(()-{ if (context!null){ //传递并且设置上下文 RequestContextHolder.setRequestAttributes(context); System.out.println(自定义线程); AuthUser user1 AuthUserUtils.getUser(); System.out.println(user1); } }).start();

更多文章