简体   繁体   English

Spring 启动 controller 检索用户详情

[英]Spring boot controller retrieve UserDetails

Hello so i have this method in JwtUtill你好所以我在 JwtUtill 有这个方法

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

But how can i request UserDetails in controller?但是我如何在 controller 中请求用户详细信息?

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

    }
}

Angular side Angular侧

  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'});
  }

Also as frontend im using angular也作为前端使用 angular

You can simply inject it using @AuthenticationPrincipal .您可以简单地使用@AuthenticationPrincipal注入它。 Eg:例如:

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

UserDetails comes in the security context in the principal UserDetails 来自主体中的安全上下文

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

It seems like you are using jwt , you don't need UserDetails to compare it with.好像您正在使用jwt ,您不需要UserDetails来比较它。

change methods as:改变方法为:

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)) {

    }
}

If your token is invalid you will not get exception in extractEmail method and if it is expired then method isTokenExpired will return false .如果您的令牌无效,您将不会在extractEmail方法中获得异常,如果它已过期,则方法isTokenExpired将返回false

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM