Глобальная конфигурация CORS не работает в Spring Boot - PullRequest
0 голосов
/ 16 апреля 2019

Поэтому я попытался добавить глобальную конфигурацию CORS в мое приложение Spring Boot. Я могу заставить это работать, когда я авторизую все источники (поставив '*' с CorsRegistry.allowedOrigins), но когда я пытаюсь указать http://localhost:8080 для примера, это не работает.

Мой контроллер

@RestController
@RequestMapping("/api")
public class Controller {

    @GetMapping("/svc")
    public ResponseEntity<String> method(@RequestParam(required = false) String id) {
    //some code
    }

Моя конфигурация:

@Configuration
public class Configuration {


    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**").allowedOrigins("http://localhost:8080")
                .allowedMethods("POST", "GET",  "PUT", "OPTIONS", "DELETE")
                ;
            }
        };
    }

Так что это не работает, как задумано. Но когда я ставлю

registry.addMapping("/**").allowedOrigins("*")

Это работает, когда я звоню http://localhost:8080/api/svc?id=999 с клиента.

Есть идеи о том, что мне здесь не хватает?

Спасибо!

1 Ответ

0 голосов
/ 16 апреля 2019

Я думаю, что у вас есть проблема с копированием / прошлым, и я полагаю, что ваш сервер работает на локальном хосте через порт 8080. Вы должны знать, что .allowedOrigins должен содержать исходные данные клиента, поэтому измените:

registry.addMapping("/**").allowedOrigins("http://localhost:8080") до registry.addMapping("/**").allowedOrigins("http://localhost:[client_port]").

, где client_port - ваш клиентский порт.


EDIT

Если вы хотите получить ip клиента, вы можете привязать HttpServletRequest к вашему методу (это только для получения адреса клиента, после того как вы сделаете это, вы можете удалить привязку):

@GetMapping("/client/ip")
public ResponseEntity<String> getClientIp(HttpServletRequest request) {
    String clientAddress = "";
    if (Objects.nonNull(request)) {
        clientAddress = request.getHeader("X-FORWARDED-FOR");
        if (Objects.nonNull(request) || "".equals(remoteAddr)) {
            clientAddress = request.getRemoteAddr();
        }
    }
    return ResponseEntity.ok().body(clientAddress);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...