У меня есть приложение загрузки весны и вы хотите войти в него через мой сервис angularJS. Я зарегистрировался через почтальон, который сохраняет cookie в моем браузере, но я хочу снова войти в систему, используя мой сервис. Из-за моего cookie я могу вызвать любые контроллеры в моем загрузочном приложении весны (все они требуют аутентификации). Но все попытки входа в систему не выполняются с ошибкой «Unauthorized». Полный браузер консольного вывод - POST http://localhost:3344/bl/login 401 (Несанкционированный)
конфигурациябезопасности для весны (я расширяю WebSecurityConfigurerAdapter):
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication()
.dataSource(dataSource)
.passwordEncoder(passwordEncoder())
.usersByUsernameQuery(USERS_BY_USERNAME_QUERY)
.authoritiesByUsernameQuery(AUTHORITIES_BY_USERNAME_QUERY);
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.exceptionHandling()
.authenticationEntryPoint(restAuthenticationEntryPoint)
.and()
.authorizeRequests()
.antMatchers("/").authenticated()
.and()
.formLogin()
.loginProcessingUrl("/bl/login")
.usernameParameter("user")
.passwordParameter("pass")
.successHandler(authenticationSuccessHandler)
.failureHandler(new SimpleUrlAuthenticationFailureHandler())
.and()
.logout()
.logoutUrl("/logout")
.invalidateHttpSession(true);
}
Моего Угловое обслуживание довольно просто:
loginModule.factory('loginService', function($http) {
return {
login: function(username, password) {
$http.post('/bl/login', {user: 'admin', pass: 'admin'}).then(
function(response) {
window.alert('success')
},
function(response){
window.alert('fail')
});
}
};
});
Я также создал контроллер как услуга входа «mock» для проверки моего углового кода:
@RequestMapping(value ="/bl/login2", produces="application/json")
JSONResponse login(@RequestBody LoginCreds credentials) {
return new JSONResponse("logged in " + credentials.getUser());
}
Этот контроллер работает, и я вижу, что мой логин и пароль переданы правильно, и я возвращаю ответ к моему угловому сервису. LoginCreds содержит 2 строки 'user' и 'pass'. JSONResponse содержит одну строку.
Возможно, это может помочь https://spring.io/blog/2015/01/12/the-login-page-angular-js-and-spring-security-partiiii – sodik