私はoauth2とjwtで春のセキュリティを実装しています。以下は私のログイン機能です
_function doLogin(loginData) {
$.ajax({
url : back+"/auth/secret",
type : "POST",
data : JSON.stringify(loginData),
contentType : "application/json; charset=utf-8",
dataType : "json",
async : false,
success : function(data, textStatus, jqXHR) {
setJwtToken(data.token);
},
error : function(jqXHR, textStatus, errorThrown) {
alert("an unexpected error occured: " + errorThrown);
window.location.href= back+'/login_page.html';
}
});
}
_
下にコントローラーがあります
_ @RequestMapping(value = "auth/secret", method = RequestMethod.POST)
public ResponseEntity<?> createAuthenticationToken(@RequestBody JwtAuthenticationRequest authenticationRequest, Device device) throws AuthenticationException {
System.out.println();
logger.info("authentication request : " + authenticationRequest.getUsername() + " " + authenticationRequest.getPassword());
// Perform the security
System.out.println( authenticationRequest.getUsername()+"is the username and "+authenticationRequest.getPassword());
final Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(
authenticationRequest.getUsername(),
authenticationRequest.getPassword()
)
);
SecurityContextHolder.getContext().setAuthentication(authentication);
logger.info("authentication passed");
// Reload password post-security so we can generate token
final UserDetails userDetails = userDetailsService.loadUserByUsername(authenticationRequest.getUsername());
final String token = jwtTokenUtil.generateToken(userDetails, device);
logger.info("token " + token);
// Return the token
return ResponseEntity.ok(new JwtAuthenticationResponse(token));
}
_
しかし、郵便配達員と一緒に郵便依頼をしようとすると、
_{
"timestamp": 1488973010828,
"status": 415,
"error": "Unsupported Media Type",
"exception": "org.springframework.web.HttpMediaTypeNotSupportedException",
"message": "Content type 'multipart/form-data;boundary=----WebKitFormBoundaryY4KgeeQ9ONtKpvkQ;charset=UTF-8' not supported",
"path": "/TaxiVis/auth/secret"
}
_
しかし、ajax呼び出しでcosole.log(data)
を実行すると、トークンが出力されますか?何が間違っているのかわかりませんでした。
Postmanでcontent-type
をJSON(application/json)として設定する必要があります。
POSTリクエスト内のボディに移動すると、生のオプションが表示されます。
そのすぐ横にドロップダウンがあり、JSON(application.json)を選択します。
Http 415 Media Unsupported
は、指定したコンテンツタイプヘッダーがアプリケーションでサポートされていない場合にのみ応答します。
POSTMANでは、送信するContent-type
ヘッダーはContent type 'multipart/form-data
ではなくapplication/json
です。 ajaxコードでは、application/json
に正しく設定しています。 POSTMANで正しいContent-typeヘッダーを渡すと、機能します。
また、このエラーが発生しました。XML(text/xml)に変更した後、本文内でテキストを使用していましたが、期待どおりの結果が得られました。
要求がXML要求の場合は、XML(test/xml)を使用します。
リクエストがJSONリクエストの場合、JSON(application/json)を使用します