2015-06-21 4 views
2

Я ударяя одну конечную точку из моего angularjs клиентского приложения для входа, когда я делаю что один я получаю следующее сообщение об ошибке в консоли браузераполучение 401 для доступа к HTTP: // локальный: 8080/OAuth/маркер

ОПЦИИ http://localhost:8080/oauth/token XMLHttpRequest не может загрузить http://localhost:8080/oauth/token. Недействительный код состояния HTTP 401

Это код на стороне сервера, чтобы принять CORS от клиента.

@Component 
 
public class SimpleCORSFilter implements Filter { 
 

 
\t public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { 
 
\t \t HttpServletResponse response = (HttpServletResponse) res; 
 
\t \t response.setHeader("Access-Control-Allow-Origin", "*"); 
 
\t \t response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); 
 
\t \t response.setHeader("Access-Control-Max-Age", "3600"); 
 
\t \t response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); 
 
\t \t chain.doFilter(req, res); 
 
\t } 
 

 
\t public void init(FilterConfig filterConfig) {} 
 

 
\t public void destroy() {} 
 

 
}

Это на стороне клиента код, который вызвав http://localhost:8080/oauth/token

angular.module('frontendApp') 
 
    .factory('AuthServerProvider', function loginService($http, localStorageService, Base64, API_SERVER) { 
 
    return { 
 
     login: function (credentials) { 
 
     var data = "username=" + credentials.username + "&password=" 
 
      + credentials.password + "&grant_type=password&scope=read%20write&" + 
 
      "client_secret=123456&client_id=clientapp"; 
 
     return $http.post(API_SERVER + 'oauth/token', data, { 
 
      headers: { 
 
      "Content-Type": "application/x-www-form-urlencoded", 
 
      "Accept": "application/json", 
 
      "Access-Control-Allow-Origin": "*", 
 
      "Authorization": "Basic " + Base64.encode("clientapp" + ':' + "123456") 
 
      } 
 
     }).success(function (response) { 
 
      var expiredAt = new Date(); 
 
      expiredAt.setSeconds(expiredAt.getSeconds() + response.expires_in); 
 
      response.expires_at = expiredAt.getTime(); 
 
      localStorageService.set('token', response); 
 
      return response; 
 
     }); 
 
     }, 
 
     logout: function() { 
 
     // logout from the server 
 
     $http.post('api/logout').then(function() { 
 
      localStorageService.clearAll(); 
 
     }); 
 
     }, 
 
     getToken: function() { 
 
     return localStorageService.get('token'); 
 
     }, 
 
     hasValidToken: function() { 
 
     var token = this.getToken(); 
 
     return token && token.expires_at && token.expires_at > new Date().getTime(); 
 
     } 
 
    }; 
 
    });

+0

Вы добавляете url oauth/auth к анонимному разрешению весной? –

+0

Добавить заголовок «Авторизация» в список ** Access-Control-Allow-Headers ** – Michael

+0

@Michael Я уже добавил в код эти ** Список доступа-Контроль-Разрешить-Заголовки **, пожалуйста, один раз, мои учетные данные не являются добавляя к запросу, когда я вижу в консоли браузера в сети. –

ответ

5

В случае запроса OPTIONS, вы не должны делать дальнейшую обработку, то есть пропустить вызов chain.doFilter(req, res) , например:

HttpServletRequest request = (HttpServletRequest) req; 
    HttpServletResponse response = (HttpServletResponse) resp; 

    response.addHeader("Access-Control-Allow-Origin", "*"); 

    if ("OPTIONS".equalsIgnoreCase(request.getMethod())) { 
     response.setHeader("Access-Control-Allow-Methods", "POST,GET,DELETE"); 
     response.setHeader("Access-Control-Max-Age", "3600"); 
     response.setHeader("Access-Control-Allow-Headers", "content-type,access-control-request-headers,access-control-request-method,accept,origin,authorization,x-requested-with"); 
     response.setStatus(HttpServletResponse.SC_OK); 
    } else { 
     chain.doFilter(req, resp); 
    } 
+0

Я добавил ваш код, пока приложение не работает, я получаю следующую ошибку в моей консоли браузера «XMLHttpRequest не может загрузить http: // localhost: 8080/oauth/token. Поле заголовка запроса Access-Control-Allow-Origin не разрешено в Access-Control-Allow-Headers « –

+0

Клиент не должен отправлять заголовок« Access-Control-Allow-Origin », он отправляется сервером на клиент! Удалите его из своего JS-кода. –

+0

@ Vilmantas Baranauskas Спасибо, что Vilmantas сейчас работает –

Смежные вопросы