如何使用 JWT 和 angular 中的 x-www-form-urlencoded 访问 spring API 2
How to access spring API with JWT and x-www-form-urlencoded in angular 2
请有人帮我解决这个问题。我有 spring 控制器,它可以处理每个 post 具有正确 user_name 和密码的请求。我想在 angular 中访问它 2. 目前如果我使用 postman 访问它,这工作正常,但我仍然无法通过 angular 访问它 2. 这是我的 spring 控制器:
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ResponseEntity<Map<String, Object>> login(@RequestParam String user_name, @RequestParam String password)
throws IOException {
String token = null;
User appUser = useri.findByUserName(user_name);
Map<String, Object> tokenMap = new HashMap<String, Object>();
if (appUser != null && appUser.getUser_password().equals(password)) {
token = Jwts.builder().setSubject(user_name).claim("roles", appUser.getRoles()).setIssuedAt(new Date())
.signWith(SignatureAlgorithm.HS256, "secretkey").compact();
tokenMap.put("token", token);
tokenMap.put("user", appUser);
return new ResponseEntity<Map<String, Object>>(tokenMap, HttpStatus.OK);
} else {
tokenMap.put("token", null);
return new ResponseEntity<Map<String, Object>>(tokenMap, HttpStatus.UNAUTHORIZED);
}
}
这是我的 postman 请求结果的打印屏幕:
image
我曾在 angular 2 中尝试过这样的代码,但失败了:
login(username: string, password: string): Observable<boolean> {
return this.http.post('http://localhost:8090/login', JSON.stringify({ user_name: 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({ user_name: username, token: token }));
// return true to indicate successful login
return true;
} else {
// return false to indicate failed login
return false;
}
});
请求似乎没有 return 响应。
请给我解决方案,任何帮助都会受到高度尊重。
导入URLSearchParams from @angular/http
import { URLSearchParams } from '@angular/http';
并使用
let urlSearchParams = new URLSearchParams();
urlSearchParams.append('user_name', username);
urlSearchParams.append('password', password);
let body = urlSearchParams.toString()
请有人帮我解决这个问题。我有 spring 控制器,它可以处理每个 post 具有正确 user_name 和密码的请求。我想在 angular 中访问它 2. 目前如果我使用 postman 访问它,这工作正常,但我仍然无法通过 angular 访问它 2. 这是我的 spring 控制器:
@RequestMapping(value = "/login", method = RequestMethod.POST)
public ResponseEntity<Map<String, Object>> login(@RequestParam String user_name, @RequestParam String password)
throws IOException {
String token = null;
User appUser = useri.findByUserName(user_name);
Map<String, Object> tokenMap = new HashMap<String, Object>();
if (appUser != null && appUser.getUser_password().equals(password)) {
token = Jwts.builder().setSubject(user_name).claim("roles", appUser.getRoles()).setIssuedAt(new Date())
.signWith(SignatureAlgorithm.HS256, "secretkey").compact();
tokenMap.put("token", token);
tokenMap.put("user", appUser);
return new ResponseEntity<Map<String, Object>>(tokenMap, HttpStatus.OK);
} else {
tokenMap.put("token", null);
return new ResponseEntity<Map<String, Object>>(tokenMap, HttpStatus.UNAUTHORIZED);
}
}
这是我的 postman 请求结果的打印屏幕:
image
我曾在 angular 2 中尝试过这样的代码,但失败了:
login(username: string, password: string): Observable<boolean> {
return this.http.post('http://localhost:8090/login', JSON.stringify({ user_name: 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({ user_name: username, token: token }));
// return true to indicate successful login
return true;
} else {
// return false to indicate failed login
return false;
}
});
请求似乎没有 return 响应。 请给我解决方案,任何帮助都会受到高度尊重。
导入URLSearchParams from @angular/http
import { URLSearchParams } from '@angular/http';
并使用
let urlSearchParams = new URLSearchParams();
urlSearchParams.append('user_name', username);
urlSearchParams.append('password', password);
let body = urlSearchParams.toString()