如何使用角度2中的JWT和x-www-form-urlencoded访问spring API

时间:2016-12-10 04:13:42

标签: angular spring-boot spring-security token jwt

请有人帮我解决这个问题。我有spring控制器,它可以处理每个具有正确user_name和密码的post请求。我想以角度2访问它。目前如果我使用邮递员访问这个,这工作正常,但我仍然无法通过角度2访问它。这是我的弹簧控制器:

    @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);
       }
   }

这是我的邮递员请求结果的打印屏幕:

image

我在角度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;
            }
        });

请求似乎没有返回响应。 请给我解决方案,任何帮助都会受到高度尊重。

1 个答案:

答案 0 :(得分:0)

URLSearchParams

导入@angular/http
import { URLSearchParams } from '@angular/http';

并使用

let urlSearchParams = new URLSearchParams();
urlSearchParams.append('user_name', username);
urlSearchParams.append('password', password);
let body = urlSearchParams.toString()