spring通过token获取用户信息
时间: 2025-06-26 18:27:26 浏览: 24
### 如何在 Spring 中通过 Token 获取用户信息
在 Spring 应用程序中,Token 是一种常见的身份验证机制,用于保护 API 接口并传递用户信息。以下是基于 Spring Security 和 JWT(JSON Web Token)的示例,展示如何通过 Token 解析并获取用户信息。
#### 1. 配置依赖项
为了支持 Token 认证和解析功能,需要引入必要的 Maven 或 Gradle 依赖项。例如,在 `pom.xml` 文件中添加以下内容:
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
```
上述配置提供了 Spring Security 支持以及 JWT 工具库的功能[^2]。
---
#### 2. 创建自定义注解以简化用户信息提取
可以创建一个名为 `@CurrentUser` 的自定义注解,以便更方便地从请求上下文中获取当前登录用户的详细信息。其核心逻辑是从安全上下文中读取已认证的身份数据[^1]。
```java
import java.lang.annotation.*;
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface CurrentUser {
}
```
接着编写对应的参数解析器来完成实际的数据绑定操作:
```java
@Component
public class CurrentUserArgumentResolver implements HandlerMethodArgumentResolver {
private final AuthenticationManager authenticationManager;
public CurrentUserArgumentResolver(AuthenticationManager authenticationManager) {
this.authenticationManager = authenticationManager;
}
@Override
public boolean supportsParameter(MethodParameter parameter) {
return parameter.getParameterAnnotation(CurrentUser.class) != null && User.class.isAssignableFrom(parameter.getParameterType());
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
String token = extractTokenFromRequest(webRequest);
Claims claims = JwtHelper.decodeAndVerify(token).getBody();
Long userId = (Long)claims.get("userId");
String username = (String)claims.get("username");
// 构造返回对象
return new User(userId, username);
}
private String extractTokenFromRequest(NativeWebRequest request){
HttpServletRequest httpRequest = request.getNativeRequest(HttpServletRequest.class);
return httpRequest.getHeader("Authorization").replace("Bearer ", "");
}
}
```
此部分实现了自动注入经过校验后的用户实体到控制器方法中的能力[^3]。
---
#### 3. 控制器代码样例
一旦完成了以上准备工作,则可以在任意 RESTful Controller 方法里轻松调用带有 `@CurrentUser` 注解的方法形参从而获得对应授权主体的相关资料:
```java
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/info")
public ResponseEntity<UserDto> getUserInfo(@CurrentUser User user){
log.debug("Fetching info for user with id {}", user.getId());
UserDto dto = convertToDto(user);
return ResponseEntity.ok(dto);
}
private UserDto convertToDto(User entity){
// 转换业务逻辑省略...
}
}
```
这里展示了当客户端携带合法访问令牌发起 GET 请求至 `/api/users/info` 地址时,服务器端能够成功识别出发送方是谁,并据此作出响应的过程[^4]。
---
### 总结
综上所述,借助于 Spring Framework 提供的强大扩展性和灵活性,配合第三方工具包如 JJWT ,我们可以较为简便高效地达成利用 Bearer Tokens 进行用户鉴权的目的 。整个过程涵盖了从前端传入 HTTP Headers 到后台解析载荷直至最后映射成领域模型实例这一完整链条上的各个环节要点说明.
阅读全文
相关推荐




















