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;
保存属性
可以放到以下任意一个地方:
- 过滤器
- 拦截器
- ControllerAdvice
- 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保存每次请求的用户信息的主要内容,如果未能解决你的问题,请参考以下文章
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