Как установить заголовок в пружинных загрузочных корсах? - PullRequest
0 голосов
/ 27 августа 2018

Я хочу включить CORS в весенней загрузке 2. Я сделал это следующим образом:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {

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

Это нормально работает в большинстве запросов, но в некоторых специальных запросах мне нужно установить заголовок Access-Control-Allow-Origin в ответ. Как я могу это сделать ?

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Из весенней документации https://spring.io/guides/gs/rest-service-cors/

Включение CORS Контроллерная конфигурация CORS Чтобы веб-служба RESTful включала заголовки контроля доступа CORS в свой ответ, вам просто нужно добавить аннотацию @CrossOrigin к методу-обработчику:

@RestController
public class GreetingController {

    @CrossOrigin(origins = "http://localhost:9000")
    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {
        System.out.println("==== in greeting ====");
        return new Greeting(counter.incrementAndGet(),String.format(template, name));
}

Эта аннотация @CrossOrigin разрешает запросы из разных источников только для этого конкретного метода. По умолчанию он разрешает все источники, все заголовки, методы HTTP, указанные в аннотации @RequestMapping, и maxAge 30 минут. Вы можете настроить это поведение, указав значение одного из атрибутов аннотации: происхождение, методы, allowHeaders ,posedHeaders, allowCredentials или maxAge. В этом примере мы только разрешаем http://localhost:9000 отправлять запросы из разных источников.

также возможно добавить эту аннотацию также на уровне класса контроллера, чтобы включить CORS во всех методах-обработчиках этого класса.

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

В настоящее время вы устанавливаете Access-Control-Allow-Origin на *, который является подстановочным знаком и соответствует всем источникам.

Если ваш запрос содержит данные, относящиеся к учетным данным, например, установив XMLHttpRequest.withCredentials в true:

  • Access-Control-Allow-Origin не должно иметь значения *

  • Ожидается дополнительный заголовок ответа Access-Control-Allow-Credentials со значением true.

0 голосов
/ 27 августа 2018

Есть много способов сделать это, например, с помощью фильтра или перехватчика или аспектов. Вы также можете использовать WebFilter, если вы используете Spring 5.

Один из способов сделать это - через перехватчики. Вот примерный код.

public class AccessControlInterceptor implements HandlerInterceptor {

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        if(somecondition) {
            response.setHeader("Access-Control-Allow-Origin", "your_value");
        }
    }
}

И зарегистрируйте этот перехватчик с пружиной вот так

@Configuration
public class MyConfig extends WebMvcConfigurerAdapter{
    @Override
    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(new AccessControlInterceptor ()).addPathPatterns("/**");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...