При нажатии службы Rest возникает ошибка. Ответ на предварительный запрос не проходит проверку управления доступом: нет заголовка «Access-Control-Allow-Origin».

Я пытаюсь подключиться к остальной службе через службу Angular $http, я получаю сообщение об ошибке, например

XMLHttpRequest cannot load
http://localhost:3000/SpringSecurity/utn/accounts/all. Response to
preflight request doesn't pass access control check: No 
'Access-Control-Allow-Origin' header is present on the requested
resource. Origin 'null' is therefore not allowed access

Запрос в угловом:

$http({
              method: 'GET',
              url: 'http://localhost:3000/SpringSecurity/utn/accounts/all',
              headers: {
                   'Content-type': 'application/json',
                   'Accept' : 'application/json',
                   "Access-Control-Allow-Origin" : "*",
                    "Access-Control-Allow-Methods" : "GET",
                    "Access-Control-Allow-Headers": "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"


                 }

            }).then(function successCallback(response) {

                console.log("Success");
                console.log(response);

              }, function errorCallback(response) {

                console.log("Error");
                console.log(response);

              });

HTML:

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script>

Весенний контроллер:

@RequestMapping(value = "/utn/accounts/all", method = RequestMethod.GET)
public ModelAndView utnAccountsAll(HttpServletRequest request,HttpServletResponse response) {

    System.out.println("Inside UTN Accounts method");
    ModelAndView model = new ModelAndView();
    response.setHeader("Access-Control-Allow-Origin", "*");
    response.setHeader("Access-Control-Allow-Methods", "GET");
    response.setHeader("Access-Control-Max-Age", "3600");
    response.setHeader("Access-Control-Allow-Headers", "Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");


    model.addObject("message","Successss");
    model.setViewName("success");
    return model;

}

person Community    schedule 15.11.2016    source источник
comment
Включите CORS на стороне сервера.   -  person Manish Singh    schedule 15.11.2016
comment
как вы настроили websecurtiyconfigureradapter?   -  person kuhajeyan    schedule 15.11.2016
comment
Включите CORS на стороне сервера, как сказал @Manish. А также разрешить предварительный вызов: response.setHeader(Access-Control-Allow-Methods, GET, OPTIONS);   -  person Sourav Mondal    schedule 15.11.2016
comment
Как включить CORS на стороне сервера? @МанишСингх   -  person    schedule 16.11.2016
comment
Как включить CORS на стороне сервера? @SouravMondal   -  person    schedule 16.11.2016


Ответы (1)


Вам необходимо включить фильтр CORS на стороне сервера. Добавьте приведенный ниже код и аннотируйте его с помощью @Configuration

@Configuration
public class CorsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        final HttpServletResponse response = (HttpServletResponse) res;
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
        response.setHeader("Access-Control-Max-Age", "3600");

            chain.doFilter(req, res);

    }
    @Override
    public void destroy() {
    }    
   @Override
    public void init(FilterConfig config) throws ServletException {
    }
person Nithyananth    schedule 31.07.2017