Spring читает имя сервера внутри Cors - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь разрешить cors с того же сервера, с портом 3000.

Поскольку я не знаю, где будет развернут мой сервер, я попытался получить доступ к имени сервера в виде строки, чем согласуйте его с моим желаемым портом.

Итак, вот мой подход:

@SpringBootApplication
public class TestApplication {
    @Autowired
    private HttpServletRequest request;
    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        System.out.println(request.getServerName());
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry
                        .addMapping("/**")
                        .allowedOrigins(request.getServerName()+":3000");
            }
        };
    }
}

Я думаю, что это основные моменты моего сообщения об ошибке:

Error creating bean with name 'corsConfigurer'
org.springframework.beans.BeanInstantiationException: Failed to instantiate
java.lang.IllegalStateException: No thread-bound request found: Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread?

1 Ответ

0 голосов
/ 22 апреля 2020

Хорошей практикой является указание разрешенных источников в файле application.properties и чтение его в вашем WebConfig.class. Это позволяет вам легко добавить свой производственный адрес позже.

application.yml

web:
    allowedOrigins: 
    - "http://localhost:4200"
    - "some other"
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    private final String[] allowedOrigins;

    public WebMvcConfig(@Value("${web.allowedOrigins:}") String[] allowedOrigins) {
        this.allowedOrigins = allowedOrigins;
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**") //
            .allowedMethods("*") //
            .allowCredentials(true) //
            .allowedOrigins(allowedOrigins);
    }
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...