我正在尝试实现一个身份验证服务,以便从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'不受支持 有人可以帮我吗?提前谢谢:)
答案 0 :(得分:0)
您的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)...
答案 1 :(得分:0)
Radouane是对的。最重要的是,为什么不使用Angular2 spring Boot jwt入门套件?它会让你的生活更轻松。 Github上有很多入门套件,我使用的是angular-spring-starter