在请求头中获取当前登录用户信息


import com.alibaba.fastjson.JSONObject;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;


public class RequestUtils {


    public static JSONObject getUserInfo() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String user = request.getHeader("user");
        String decode = null;
        try {
            decode = URLDecoder.decode(user, "UTF-8");
            JSONObject jsonObject = JSONObject.parseObject(decode);
            return jsonObject;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return new JSONObject();
    }

    public static String getUsername() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String user = request.getHeader("user");
        String decode = null;
        try {
            decode = URLDecoder.decode(user, "UTF-8");
            JSONObject jsonObject = JSONObject.parseObject(decode);
            return jsonObject.getString("userName");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return "system";
    }

    public static Long getUserId() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String user = request.getHeader("user");
        String decode = null;
        try {
            decode = URLDecoder.decode(user, "UTF-8");
            JSONObject jsonObject = JSONObject.parseObject(decode);
            return jsonObject.getLong("id");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String getRealname() {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String user = request.getHeader("user");
        String decode = null;
        try {
            decode = URLDecoder.decode(user, "UTF-8");
            JSONObject jsonObject = JSONObject.parseObject(decode);
            return jsonObject.getString("realName");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return "system";
    }
}

要设置 RestTemplate 的全局请求头当前登录用户对应信息,你需要在每次发起请求时动态地获取当前登录用户对应信息,并将其设置到请求头。 一种比较常见的做法是使用 ThreadLocal 存储用户信息,在拦截器获取该信息并设置到请求头。具体步骤如下: 1. 创建一个存储用户信息的 ThreadLocal 对象: ``` public class UserContextHolder { private static final ThreadLocal<String> userContext = new ThreadLocal<>(); public static String getUserContext() { return userContext.get(); } public static void setUserContext(String user) { userContext.set(user); } public static void clear() { userContext.remove(); } } ``` 2. 在拦截器获取当前登录用户对应信息并设置到请求头: ``` public class UserContextInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 获取当前登录用户对应信息 String user = getCurrentUser(); // 将用户信息设置到请求头 request.getHeaders().add("X-User-Id", user); // 存储用户信息到 ThreadLocal UserContextHolder.setUserContext(user); return true; } private String getCurrentUser() { // TODO: 实现获取当前登录用户对应信息的逻辑 } } ``` 3. 在 RestTemplate 添加拦截器: ``` public class RestTemplateConfig { @Bean public RestTemplate restTemplate() { RestTemplate restTemplate = new RestTemplate(); // 添加拦截器 restTemplate.setInterceptors(Collections.singletonList(new UserContextInterceptor())); return restTemplate; } } ``` 这样,每次使用 RestTemplate 发起请求时,就会自动将当前登录用户对应信息设置到请求头
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值