私は認証のためにログインページを実装しています。 AngularJSは、ユーザーの資格情報を使用してサーバーに投稿要求を送信します。AngularJS:POST要求後にGETリクエストが返され、ログインのために302が返される
//service.js
authApp.factory("loginFactory", function ($http) {
return{
login: function(username, password) {
var data = {username: username, password: password};
serialize = function(obj) {
var str = [];
for(var p in obj)
if (obj.hasOwnProperty(p)) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
return str.join("&");
}
return $http({
method: 'POST',
url: 'http://localhost:8080/login',
data: serialize(data),
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
}
});
}
}
});
以下のマイコンは、正常と異常を処理します。デバッグ目的のために、私はリダイレクトの代わりに応答を出力します。
authApp.controller('LoginCtrl', ['$scope', '$location', 'loginFactory', function($scope, $location, loginFactory){
$scope.authenticate = function() {
loginFactory.login($scope.username, $scope.password)
.then(function(response) {
console.log(response);
}, function errorCallBack(response) {
console.log(response);
});
}
}]);
私が実行すると、POST要求は応答なしで302を返します。そしてGETリクエストがすぐに始まります。パスワードが正しい場合は、 "http://localhost:8080/"にリダイレクトされます。パスワードが間違っていると、 "http://localhost:8080/login?error"にリダイレクトされます。どちらのパスにもハンドラがないので、401エラーが返されます。Angularコントローラは、GETリクエストからの応答をあたかもPostリクエストからの応答であるかのようにキャプチャします。
バックエンドでは、認証は春のセキュリティによって行わここでは、セキュリティの設定されています。
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic().and()
.addFilterBefore(new CORSFilter(), ChannelProcessingFilter.class)
.csrf().disable()
.authorizeRequests()
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.anyRequest()
.authenticated()
.and()
.formLogin();
//.loginPage("/login");
}
どこGETリクエストから来たんなぜオリジナルのポスト要求はリダイレクトをトリガーん
?