とバックエンドの春に角度クライアントログインをしてください私は、このガイド以下の私の春のバックエンドにJWTを追加しました:https://auth0.com/blog/securing-spring-boot-with-jwts/JWT
を私はポストマンのすべてが、すぐに私はとして正常に動作しますが、同様にソフトウェアを使用してPUTリクエストを送信すると私のAngularクライアントでログインしようとすると、HttpServletRequest
のデータは空です。
@Override
public Authentication attemptAuthentication(HttpServletRequest req, HttpServletResponse res)
throws AuthenticationException, IOException, ServletException {
String reqBody = req.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
// this appears to be empty on angular client calls
System.out.println(reqBody);
ObjectMapper objectMapper = new ObjectMapper().configure(Feature.AUTO_CLOSE_SOURCE, true)
.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
AccountCredentials creds = objectMapper.readValue(reqBody, AccountCredentials.class);
return getAuthenticationManager().authenticate(new UsernamePasswordAuthenticationToken(creds.getUsername(),
creds.getPassword(), Collections.emptyList()));
}
私はこのようなクライアントのうち、要求を送信しています:
const user = {
username: "asdf",
password: "asdf"
};
// imported from '@angular/http'
const headers = new Headers({
'Content-Type': 'application/json'
});
const body = JSON.stringify(user);
return this.http
.put("http://localhost:8080/api/login", body, {headers})
.toPromise()
.then(response => response.json().data as User)
.catch(this.handleError);
私の提案だろう
私は次のようにJWTLoginFilter
のattemptAuthentication
方法でデータをチェック私がリクエストボディを間違った方法で送っているのですが、私が間違っていることはわかりません。
私が試した:代わりにPOSTを使用して、実施例
- は、それが別のオブジェクトJSON文字列として送信
- に包まれた送信正規JSオブジェクト
- として身体を送信します(PUTのPUTで動作しますが)
- コンテンツタイプヘッダーを他の値に変更する
これで、バックエンドにデータが表示されませんでした。
さらに詳しい情報が必要な場合は、私にお尋ねください。
あなたは 'spring-security-oauth2'依存関係を使用していますか? –
@PraveenMいいえ、私は 'spring-boot-starter-security @ 1.5.8.RELEASE'と' jjwt @ 0.7.0'を使用しています。 – Froxx