角2弹簧靴

时间:2017-05-15 09:16:17

标签: angular spring-boot

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

这是我的代码:

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'不受支持 有人可以帮我吗?提前谢谢:)

2 个答案:

答案 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)...

答案 1 :(得分:0)

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