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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot--使用attribute保存每次请求的用户信息相关的知识,希望对你有一定的参考价值。


简介

说明

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

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

相关网址

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

代码

用户实体类

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​

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

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

以上是关于SpringBoot--使用attribute保存每次请求的用户信息的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot使用mybatis,发生:Failed to configure a DataSource: 'url' attribute is not specified an

springboot+RabbitMQ 问题 RabbitListener 动态队列名称:Attribute value must be constant

执行使用maven打包springboot的jar包提示“no main manifest attribute, in /XXX.jar“

Spring Boot + Thymeleaf 错误 java.lang.ClassNotFoundException: org.thymeleaf.dom.Attribute

SpringBoot 集成sharding-jdbc 提示:Failed to configure a DataSource: ‘url‘ attribute is not specified ***

SpringBoot发布WAR启动报错:Error assembling WAR: webxml attribute is required