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 token=httpServletRequest.getHeader("TP-Auth");
        if(StringUtils.isBlank(token)){
            return new AuthUser();
        }
        //如果不存在则从token中进行解析
        Map<String, Object> tokenMap=JwtUtil.getTokenInform(token);
        AuthUser authUser=AuthUser.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();
相关推荐
llqbzllll4 分钟前
Spring AI 工具调用不是反射一下就结束:用 2.0.1 跑通失败恢复与调用上限
人工智能·后端
狼爷36 分钟前
Rust/Go/Java/Python/PHP 大比拼:负载下后端框架到底差多少?
java·后端·编程语言
念何架构之路40 分钟前
zap扩展生态与总结
java·前端·数据库
mantou1321 小时前
我给 AI Agent 做了个「油猴」:让 Claude Code / Codex 直接用你已登录的浏览器
前端·javascript·后端
程序员老赵1 小时前
Docker 部署 DeepSeek Harness:轻松搭建局域网里的 AI Agent 平台
后端·ai编程·deepseek
第七页独白2 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库
YIAN2 小时前
实战|用 DeepSeek + SQLite 从零搭建轻量 Text2SQL 查询助手
后端·sqlite·deepseek
王中阳Go2 小时前
自己摸了 2 个月零 offer,补底子只用了 3 块:Go 后端转 AI 最难的不是技术
后端·agent·ai编程
高频因子挖掘机2 小时前
第一次补历史行情:按股票拆,还是按日期拆请求?
后端·github·api
QCoding2 小时前
Spring AI Alibaba Graph实战:从ReAct Agent到Workflow,企业AI复杂流程该如何编排?
java·人工智能