SpringBoot--使用attribute保存每次请求的用户信息

原文网址:SpringBoot--使用attribute保存每次请求的用户信息_IT利刃出鞘的博客-CSDN博客

简介

说明

        本文介绍如何使用HttpServletRequest的attribute来保存每次请求的用户信息。

        保存之后,后边的业务操作就可以获取(Controller或者Service都可以,只要在一个请求中)。

相关网址

也可以使用ThreadLocal保存每次请求的用户信息,见 :SpringBoot--使用ThreadLocal保存每次请求的用户信息_IT利刃出鞘的博客-CSDN博客

代码

用户实体类

package com.knife.common.entity;

import lombok.Data;

@Data
public class UserDTO {
    private Long userId;

    private String userName;
}

保存属性

可以放到以下任意一个地方:

  1. 过滤器
  2. 拦截器
  3. ControllerAdvice
  4. AOP

本处我使用ControllerAdvice。

package com.knife.common.advice;
 
import com.knife.common.entity.UserDTO;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ModelAttribute;
 
import javax.servlet.http.HttpServletRequest;
 
@ControllerAdvice
public class GlobalRequestAdvice {
    @ModelAttribute
    public void authenticationUser(HttpServletRequest request) {
        // 此处实际应该根据header的token解析出用户
        // 本处为了简单,直接虚构一个用户
        UserDTO userDTO = new UserDTO();
        userDTO.setUserId(3L);
        userDTO.setUserName("Tony");

        request.setAttribute("user", userDTO);
    }
}

获取属性

package com.knife.controller;

import com.knife.common.entity.UserDTO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

@RestController
public class HelloController {

    @GetMapping("/test")
    public String test() {
        ServletRequestAttributes servletRequestAttributes =
                (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
        HttpServletRequest request = servletRequestAttributes.getRequest();

        UserDTO userDTO = (UserDTO)request.getAttribute("user");
        System.out.println(userDTO.toString());
        return "test success";
    }
}

测试

请求:http://localhost:8080/test

结果:后台打印如下内容:

猜你喜欢

转载自blog.csdn.net/feiying0canglang/article/details/126596713