簡體   English   中英

如何從請求的授權 header 中為我的 HandlerMethodArgumentResolver 獲取 JwtAuthenticationToken?

[英]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 文章幫助我搭建HandlerMethodArgumentResolverhttps://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM