2017-05-15 7 views
0

私は、angle2で書かれたフロントエンドアプリケーションから、春のブートで書かれたバックエンドサービスに接続するための認証サービスを実装しようとしています。 また、接続にjwtトークンを使用しようとしています。ここ角2文字の起動

が私のコードです:

angular2:

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 'はサポートされていません 誰も助けてくれますか?ありがとうございます。

+0

のように、角度コードにコンテンツタイプが設定されていないようです。ヘッダ 'Content-Type:application/json'を設定してみてください –

+0

ええ、それはありがとう –

答えて

0

あなたのSpring Bootアプリケーションでは、Content-Typeの要求がapplication/jsonになると予想しています。コンテンツタイプを設定していないので、the browser are setting a default one for youtext/plain;charset=UTF-8)です。

だから、あなたがしなければならないのは、あなたが以下のようにコンテンツタイプを要求指定されています

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

Radouaneは正しいです。さらに、Angular2 spring Boot jwtスターターキットを使用してみませんか?あなたの人生をもっと楽にするでしょう。 Githubにはたくさんのスターターキットがありますが、私が使っているのはangular-spring-starter

関連する問題