私は、SpringバックエンドとAngular 5フロントエンドを使用してアプリケーションを開発しようとしています。ログインのために私はSpring Securityを使用しており、フロントエンドではログインデータをx-www-form-urlencoded
として送信しようとしています。しかし、バックエンドはユーザー名とパスワードの両方にnullを受け取ります。 HttpClient
のAngular 5ドキュメンテーションは、jsonデータを投稿するための例のみを提供し、Http
は推奨されなくなりました。フォームのurlencodeをAngular 5に投稿する
この問題を解決する方法については、何かアドバイスをいただければ幸いです。
constructor(public httpClient: HttpClient) {
console.log('Hello RestService Provider');
}
login(username: string, password: string) {
var body = 'username=' + username + '&password=' + password + "&remember-me=" + false;
var headers = new HttpHeaders();
headers.append('Content-Type', 'application/x-www-form-urlencoded; charset=utf-8');
let options = {headers: headers, withCredentials: true};
this.callPostWithOptions("login", body, options).then(data=>{
this.getCurrentUser();
});
}
callPostWithOptions(address, body, options) {
return new Promise(resolve => {
address = this._SERVER_HOST + ":" + this._SERVER_PORT + "/" + address;
this.httpClient.post(address, body, options)
.subscribe((data) => {
resolve(data);
},
(err) => {
console.log("error during POST", err)
});
});
}
とサーバーのエンドポイント:
@RequestMapping(value = "/login", method = RequestMethod.GET)
@CrossOrigin(origins = "*")
public ModelAndView handle() {
return new ModelAndView("/app/userOverview");
}
編集:ここ
は私の角度コードがある私は、私はポストマンでそれをテストするとき、それは問題なく動作しますが、言及するのを忘れてしまった
サーバーのエンドポイントを表示することができますか? –
私はそれを追加しましたが、主に春のセキュリティ –
2つの質問によって処理されます:(1)なぜアクセス制御許可原点ヘッダーを要求に追加していますか?これは、サーバーからブラウザに送信される[レスポンスヘッダー](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/AccessControl-Allow-Origin)です。 (2) 'callPostWithOptions'を呼び出し、第2引数' urlSearchParams'を提供します。それはどこから来たのですか?あなたのコードにはさらに問題があります。例えば 'headers.append()'は新しいオブジェクトを返しますが、既存のオブジェクトを変更していると思います – BeetleJuice