Ошибка CORS - Spring Boot Security + HTTP-редирект - PullRequest
0 голосов
/ 26 сентября 2018

Я не могу заставить HTTP работать правильно с CORS в Spring Boot Security.Я искал и пробовал разные решения для Интернета и StackOverFlow, но я дошел до того, что не знаю, что делать.

Я продолжаю получать эту ошибку из приложения Angular FrontEnd (Firefox): Запрос из другого заблокированного источника: та же политика источника запрещает чтение удаленного ресурса на http://172.20.3.9:8080/api/auth/signin (причина: отсутствует заголовок CORS «Access-Control-Allow-Origin»).[Узнать больше] Блокированный запрос перекрестного происхождения: та же политика происхождения не позволяет читать удаленные ресурсы на http://172.20.3.9:8080/api/auth/signin. (причина: запрос CORS без успеха).

У меня естьОпределение компонента для реализации перенаправления HTTP в моем Tomcat следующим образом:

@Bean
public TomcatServletWebServerFactory servletContainer(){
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint securityConstraint = new SecurityConstraint();
securityConstraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
securityConstraint.addCollection(collection);
context.addConstraint(securityConstraint);
}
};
tomcat.addAdditionalTomcatConnectors(redirectConnector());
return tomcat;
}

private Connector redirectConnector(){
Connector connector = new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
connector.setScheme("http");
connector.setPort(8080);
connector.setSecure(false);
connector.setRedirectPort(8444);
return connector;
}

Также у меня есть класс WebSecurity, расширяющий WebSecurityConfigurerAdapter с помощью моего фильтра CORS и переопределяющий конфигурацию

@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("OPTIONS");
config.addAllowedMethod("GET");
config.addAllowedMethod("POST");
config.addAllowedMethod("PUT");
config.addAllowedMethod("DELETE");
source.registerCorsConfiguration("/**", config);
return new CorsFilter(source);

Этот метод упрощен прямосейчас.Я протестировал множество конфигураций: с / без .cors (), channelSecure и т. Д.

protected void configure(HttpSecurity http) throws Exception {

http.cors().and().authorizeRequests().antMatchers("/api/auth/**")
.permitAll()

http.addFilterBefore(corsFilter(), ChannelProcessingFilter.class);
http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);

Я также пытался определить @CrossOrigin в контроллере / методе.Мой текущий метод настройки без перенаправления HTTP Работает нормально, нет проблем с CORS:

protected void configure(HttpSecurity http) throws Exception {
            http
            .csrf().disable()
            .exceptionHandling()
            .authenticationEntryPoint(unauthorizedHandler)
            .and()
            .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
            .authorizeRequests()
            .antMatchers("/api/auth/**")
            .permitAll()
            .anyRequest().anonymous();

            http.addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);
}

Так что я думаю, что проблема заключается в сочетании Spring Security и HTTPS Redirect в Tomcat.Может ли кто-нибудь помочь мне решить эту проблему?Заранее спасибо,

1 Ответ

0 голосов
/ 26 сентября 2018

Все, что вам нужно сделать, это создать следующий класс

@Configuration
public class WebConfiguration extends WebMvcConfigurerAdapter {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("*");
    }
}
...