[英]How do I get a JwtAuthenticationToken for my HandlerMethodArgumentResolver from the request's Authorization header?
我有一個 Spring 引導應用程序,它需要在 HTTP Authorization
JwtAuthenticationToken
中傳遞的 JwtAuthenticationToken。 header 本身提供不記名令牌; Spring 正在做一些我目前不知道的將承載令牌字符串轉換為JwtAuthenticationToken
的魔術。 我有一些從令牌中提取用戶 ID 的代碼,用於在服務器上定位正確的資源。
private String getUidFromToken(JwtAuthenticationToken token) {
// this is placeholder code to demonstrate what I'm doing with the token
}
public ResponseEntity<String> getUserProfile(JwtAuthenticationToken token) {
String uid = getUidFromToken(token);
// rest of the code
}
由於我在幾個不同的地方需要這些令牌,因此我決定考慮將getUidFromToken
代碼移動到HandlerMethodArgumentResolver
中。 我遇到的問題是我需要一個JwtAuthenticationToken
,但我只從Authorization
header 作為字符串獲取不記名令牌。
我是否有可能獲得該JwtAuthenticationToken
而不是字符串?
我在專業熟人的幫助下想通了。 訣竅是獲取 static 安全上下文,它允許您獲取當前身份驗證。 然后,獲得我正在尋找的uid
聲明是微不足道的。
我使用 Baeldung 文章幫助我搭建HandlerMethodArgumentResolver
: https://www.baeldung.com/spring-mvc-custom-data-binder#1-custom-argument-resolver
這是我在resolveArgument
方法中所做的:
@Override
public Object resolveArgument(
MethodParameter parameter,
ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
WebDataBinderFactory binderFactory)
throws Exception {
final var auth = (JwtAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
final var token = auth.getToken();
if (token.hasClaim("uid")) {
return token.getClaimAsString("uid");
} else {
return null;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.