分析原理参考:https://www.cnblogs.com/shuilangyizu/p/8621669.html
RequestContextHolder 的使用
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
// 获取请求体 request
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
// 获取响应体 response
HttpServletResponse response = ((ServletRequestAttributes) requestAttributes).getResponse();
// 获取请求头 headers
Enumeration<String> headerNames = request.getHeaderNames();
// 根据请求体参数从 request 中获取 header 请求头值
Map<String, String> headers = new HashMap<>();
if (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
headers.put(name, request.getHeader(name));
}
获取请求头 Header 两种方式
1. 使用 @RequestHeader 注解
- 获取单个:
@PostMapping(value = "/test/header")
public void post(@RequestHeader(value="token") String token) {
// ...
}
- 获取所有:
@PostMapping(value = "/test/header")
public void post(@RequestHeader Map<String, String> headers) {
// ...
}
2. 从 HttpServletRequest 对象中获取
示例代码中的 request 为 HttpServletRequest 对象,该对象的获取在下文中介绍。
- 获取单个:
String token = request.getHeader("token");
- 获取所有:
Enumeration<String> headerNames = request.getHeaderNames();
Map<String, String> headers = new HashMap<>();
if (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
headers.put(name, request.getHeader(name));
}
获取请求体 HttpServletRequest 对象
HttpServletRequest 对象就是我们常说的 request 对象,里面封装了一次请求中的所有信息。
比如请求方IP、请求方法、请求头信息等,本文主要介绍对象的获取方式,具体使用方法不在这里过多阐述。
1. 接口方法入参获取
@PostMapping(value = "/test/request")
public void post(HttpServletRequest request) {
// ...
// 获取一个参数
String name=request.getParameter("name");
// 获取所有参数
Map map=request.getParameterMap();
// 获取请求方 ip
httpServletRequest.getRemoteAddr();
}
2. 从 RequestContextHolder 获取
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
// 获取请求体 request
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
获取 Cookie 中的值
RequestAttributes requestAttributes = RequestContextHolder.currentRequestAttributes();
// 1. 获取请求体 request
HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
if (Objects.nonNull(request)) {
Map<String, String> cookieMap = new ConcurrentHashMap<>();
Cookie[] cookies = request.getCookies();
if (null != cookies) {
Arrays.stream(cookies).forEach(element -> cookieMap.put(element.getName(), element.getValue()));
}
}
可以从 Map 中获取对应的 cookie 值


1039

被折叠的 条评论
为什么被折叠?



