【问题标题】:Spring boot controller retrieve UserDetailsSpring Boot 控制器检索 UserDetails
【发布时间】:2020-05-12 19:15:49
【问题描述】:

你好,所以我在 JwtUtill 中有这个方法

public Boolean validateToken(String token, UserDetails userDetails) {
    final String username = extractEmail(token);
    return (username.equals(userDetails.getUsername()) && !isTokenExpired(token));
}

但是我如何在控制器中请求 UserDetails?

@GetMapping("/validateToken")
public String validateToken(@RequestHeader(value="token") String token) {
    if(jwtUtil.validateToken(token,???)) {

    }
}

角边

  public isTokenExpired(): Observable<string> {
    const headers = new HttpHeaders().set('token', localStorage.getItem('token'));
    return this.httpClient.get<string>('http://localhost:8080/api/validateToken', {headers, responseType: 'text' as 'json'});
  }

也可以作为前端使用 angular

【问题讨论】:

  • 这能回答你的问题吗? How to get active user's UserDetails
  • 它为我返回 null ..
  • @angnewb 它应该是扩展 userdetails 而不是 userdetails 本身的类。您需要有扩展 userdetails 的用户类,然后才能通过。

标签: java spring-boot jwt


【解决方案1】:

您可以简单地使用@AuthenticationPrincipal 注入它。例如:

@GetMapping("/validateToken")
public String validateToken(@AuthenticationPrincipal UserDetails userDetails, ...

【讨论】:

    【解决方案2】:

    你好像在用jwt,你不需要UserDetails来比较它。

    改变方法为:

    public Boolean validateToken(String token) {
        final String username = extractEmail(token);
        return (!StringUtils.isEmpty(username) && !isTokenExpired(token));
    }
    
    @GetMapping("/validateToken")
    public String validateToken(@RequestHeader(value="token") String token) {
        if(jwtUtil.validateToken(token)) {
    
        }
    }
    

    如果您的令牌无效,您将不会在 extractEmail 方法中得到异常,如果它已过期,则方法 isTokenExpired 将返回 false

    【讨论】:

      【解决方案3】:

      UserDetails 来自主体中的安全上下文

      UserDetails userDetails =
       (UserDetails)SecurityContextHolder.getContext().getAuthentication().getPrincipal();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-24
        • 2020-08-22
        • 2016-12-22
        • 2019-07-14
        • 2021-06-09
        • 2015-11-19
        • 2015-05-14
        • 2012-12-19
        相关资源
        最近更新 更多