springboot 从header中获取某个值并存在当前线程中
时间: 2024-10-16 19:20:43 浏览: 18
在Spring Boot应用中,如果你想从HTTP请求头中获取特定的值,并将其存储在当前线程中,可以使用`@RequestHeader`注解结合`ThreadLocal`变量。`ThreadLocal`是一个线程本地变量,每个线程都有它自己的副本。
下面是一个简单的示例,假设我们想获取名为"Authorization"的请求头:
```java
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
@Component
public class HeaderUtils {
private static final ThreadLocal<String> authorizationToken = new ThreadLocal<>();
public void setAuthorizationFromRequest(HttpServletRequest request) {
HttpHeaders headers = request.getHeaders();
String authToken = headers.getFirst("Authorization");
// 如果有值,设置到ThreadLocal
if (authToken != null) {
authorizationToken.set(authToken);
}
}
public String getAuthorization() {
return authorizationToken.get();
}
// 可以选择清空ThreadLocal,当不需要这个值时
public void clearAuthorization() {
authorizationToken.remove();
}
}
```
要在控制器或其他服务中使用这个方法,只需要注入`HeaderUtils`并调用`setAuthorizationFromRequest`即可:
```java
@RestController
public class MyController {
private final HeaderUtils headerUtils;
public MyController(HeaderUtils headerUtils) {
this.headerUtils = headerUtils;
}
@GetMapping("/protected")
public ResponseEntity<?> protectedResource() {
String authToken = headerUtils.getAuthorization();
// ...然后在这里处理授权信息
return ResponseEntity.ok("Access granted with token: " + authToken);
}
}
```
阅读全文