【问题标题】:angular 2 -spring boot角度 2 弹簧靴
【发布时间】:2023-03-29 20:38:02
【问题描述】:

我正在尝试实现身份验证服务,以从用 angular2 编写的前端应用程序连接到用 Spring Boot 编写的后端服务。 我也在尝试使用 jwt 令牌进行连接。

这是我的代码:

角度2:

    login(id : number, username: string, password: string): 
    Observable<boolean> 
   {
      return this.http.post('/api/authenticate', JSON.stringify({id: id, 
      username: username, password: password }))
           .map((response: Response) => {
            // login successful if there's a jwt token in the response
            let token = response.json() && response.json().token;
            if (token) {
                // set token property
                this.token = token;

                // store username and jwt token in local storage to keep 
user logged in between page refreshes
                localStorage.setItem('currentUser', JSON.stringify({ 
 username: username, token: token }));

                // return true to indicate successful login
                return true;
            } else {
                // return false to indicate failed login
                return false;
            }
        });
}

后端:

 public ResponseEntity<?> login(@RequestBody User user) throws 
 ServletException {

    String jwtToken="";

    if(user.getName() == null || user.getPassword() == null) {
            throw new ServletException("Utilisateur ou mot de passe non valide");
    }

    String username = user.getName();
    String password = user.getPassword();

    User user1 = userService.findByName(username);
    if(user1 == null) {
        throw new ServletException("Utilisateur non trouvé");
    }

    String pwd = user1.getPassword();

    if(!password.equals(pwd)){
         throw new ServletException("login invalide. Verifiez login et mot de passe");
    }

    jwtToken = Jwts.builder().setSubject(username).claim("roles", "user").setIssuedAt(new Date())
                   .signWith(SignatureAlgorithm.HS256, "secretkey").compact();

    return new ResponseEntity<String>(jwtToken, HttpStatus.OK);     
}

我在后端收到此错误: 不支持内容类型 'text/plain;charset=UTF-8' 任何人都可以帮助我吗?在此先感谢:)

【问题讨论】:

  • 看起来内容类型未在角度代码中设置。尝试设置标题Content-Type: application/json
  • 是的,就是这样 :) 谢谢

标签: angular spring-boot


【解决方案1】:

您的 Spring Boot 应用程序期望 Content-Type 等于 application/json 的请求。由于您没有设置内容类型,the browser are setting a default one for you (text/plain;charset=UTF-8)。

所以你所要做的就是指定你请求的内容类型如下:

let op = new BaseRequestOptions();
op.headers.append("Content-Type", "application/json");
this.http.post(url, body, op)...

【讨论】:

    【解决方案2】:

    Radouane 是对的。最重要的是,为什么不使用 Angular2 spring Boot jwt 入门套件?它会让你的生活轻松很多。 Github上有很多入门工具包,我用的是angular-spring-starter

    【讨论】:

      猜你喜欢
      • 2018-08-09
      • 2019-05-17
      • 2020-08-06
      • 2021-12-08
      • 2021-02-16
      • 1970-01-01
      • 2017-12-22
      • 2018-02-14
      • 1970-01-01
      相关资源
      最近更新 更多