RequestHeaderMethodArgumentResolver 认证信息特定参数解析案例
RequestHeaderMethodArgumentResolver
用于将 HTTP 请求头绑定到控制器方法参数的参数解析器。它允许方法参数直接接收特定的请求头值。
类结构设计
业务案例:
开发一个需要用户认证信息的 Web 应用程序。程序中的每个请求都需要包含一个 Authorization
头,用于验证用户身份。使用 RequestHeaderMethodArgumentResolver
,你可以轻松地将这个请求头的值注入到控制器方法的参数中。
1. 控制器方法使用 @RequestHeader
注解:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AuthController {
@GetMapping("/user")
public String getUserInfo(@RequestHeader("Authorization") String authToken) {
// 使用 authToken 验证用户身份
// 如果验证成功,返回用户信息
// ...
return "User info for authenticated user";
}
}
在这个例子中,@RequestHeader("Authorization")
注解用于将 Authorization
请求头的值注入到 authToken
参数中。
2. 客户端请求:
客户端通过发送包含 Authorization
头的 HTTP 请求来访问受保护的资源:
GET /user
Authorization: Bearer your_access_token_here
核心代码分析:
RequestHeaderMethodArgumentResolver
类实现了 HandlerMethodArgumentResolver
接口,用于解析 HTTP 请求头到控制器方法的参数。以下是解析器的核心组件和它们的功能:
-
支持参数判断:
supportsParameter
方法检查方法参数是否有@RequestHeader
注解。
-
参数解析:
resolveArgument
方法根据@RequestHeader
注解的值从请求中提取对应的头信息。
-
处理请求头:
- 使用
NativeWebRequest
获取当前请求的头信息。
- 使用
参数解析代码 :
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.context.request.NativeWebRequest;
public class RequestHeaderMethodArgumentResolver implements HandlerMethodArgumentResolver {
@Override
public boolean supportsParameter(MethodParameter parameter) {
// 检查参数是否有 @RequestHeader 注解
return parameter.hasParameterAnnotation(RequestHeader.class);
}
@Override
public Object resolveArgument(MethodParameter parameter, NativeWebRequest webRequest) throws Exception {
// 获取 @RequestHeader 注解
RequestHeader headerAnno = parameter.getParameterAnnotation(RequestHeader.class);
// 获取请求头的名称
String headerName = headerAnno.value();
// 从请求中获取头的值
String headerValue = webRequest.getHeader(headerName);
// 返回请求头的值
return headerValue;
}
}
总结:
RequestHeaderMethodArgumentResolver
允许开发者直接将 HTTP 请求头的值注入到控制器方法的参数中,简化了请求头的处理。- 它提供了一种灵活的方式来访问请求头,尤其是在需要根据请求头进行业务逻辑处理时。
转载自:https://juejin.cn/post/7384271428147183657