Я пытаюсь настроить CORS в своем проекте Java Spring.
Отдельно у меня есть приложение Angular CLI со страницей входа, я хотел бы аутентифицировать пользователя, используя мой Spring API.
Я получаю сообщение об ошибке на клиенте
origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Я получаю это в журнале сервера:
No mapping found for HTTP request with URI [/authenticateUser]
Я пробовал несколько примеров из других потоков, но ошибка клиента нене меняюсь, поэтому я немного запутался, где настроить cors
У меня есть класс AppSecurityConfig
, который extends
WebSecurityConfigurerAdapter
@Configuration
@EnableWebSecurity
public class AppSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
User.UserBuilder users = User.withDefaultPasswordEncoder();
auth.inMemoryAuthentication()
.withUser(users.username("user1").password("password").roles("ROLE1"))
.withUser(users.username("user2").password("password").roles("ROLE2"))
.withUser(users.username("user3").password("password").roles("ROLE3"));
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.cors()
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin()
.loginPage("/loginPageUrl")
.loginProcessingUrl("/authenticateUser")
.permitAll();
}
Мой сервис Angular делает запрос:
authenticateUser(json: any) {
return this.http.post('http://localhost:8085/authenticateUser'
, json, {headers : new HttpHeaders()
.set('Authorization', '')
});
}
Переданный json:
{ username: this.username, password: this.password }
При добавлении следующего метода в мой класс AppSecurityConfig было решено «Нет» Access-Control-Allow-OriginЗаголовок присутствует в запрашиваемом ресурсе.
@Bean
CorsConfigurationSource corsConfigurationSource() {
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(Arrays.asList("http://localhost:4200"));
configuration.setAllowedMethods(Arrays.asList("GET","POST"));
configuration.addAllowedHeader("content-type");
configuration.addAllowedHeader("Access-Control-Allow-Origin");
configuration.addAllowedHeader("Authorization");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}