2014-11-27 2 views
3

Рассмотрим эту информацию заголовка:JQuery базовой аутентификации провал

Информация
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Encoding:gzip, deflate, sdch 
Accept-Language:en-US,en;q=0.8 
Authorization:Basic TWluZVN0YXI6TWluZVN0YXI= 
Cache-Control:max-age=0 
Connection:keep-alive 
Host:* 

Этот заголовок для URL. Я пытаюсь получить значение json из этого URL-адреса. Этот url, когда один доступ к нему всплывает для имени пользователя и пароля.

TRY1:

 $.ajax({ 
     type:'GET', 
     url: 'http://'+domainName+':9898/*/*', 
     dataType:"json", 
     username: '*', 
     password: '*', 
     async: false 
     }).responseText; 

TRY2

 $.ajax({ 
     type:'GET', 
     url: 'http://'+domainName+':9898/jolokia/*/*', 
     dataType:"json", 
     crossDomain: true, 
     beforeSend: function(xhr) { 
      xhr.setRequestHeader("Authorization", "Basic " + btoa('*' + ":" + '*')); 
      }, 
     async: false 
     }).responseText; 

TRY3:

попытался добавить это в web.xml из котом.

<filter> 
<filter-name>CorsFilter</filter-name> 
<filter-class>org.apache.catalina.filters.CorsFilter</filter-class> 
<init-param> 
<param-name>cors.allowed.origins</param-name> 
<param-value>*</param-value> 
</init-param> 
<init-param> 
<param-name>cors.allowed.methods</param-name> 
<param-value>GET,POST,HEAD,OPTIONS,PUT</param-value> 
</init-param> 
<init-param> 
<param-name>cors.allowed.headers</param-name> 
<param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request- Method,Access-Control-Request-Headers</param-value> 
</init-param> 
<init-param> 
<param-name>cors.exposed.headers</param-name> 
<param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param- value> 
</init-param> 
<init-param> 
    <param-name>cors.support.credentials</param-name> 
<param-value>true</param-value> 
</init-param> 
<init-param> 
    <param-name>cors.preflight.maxage</param-name> 
    <param-value>10</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CorsFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Но до сих пор я не могу получить доступ к URL, по-прежнему дает следующее сообщение об ошибке:

 GET http://***.**.**.**:9898/*/* 401 (Unauthorized) 
    jquery.min.js:5 XMLHttpRequest cannot load http://**.**.**.**:9898/*/*. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin http://localhost:8080 is therefore not allowed access. The response had HTTP status code 401.(index):1 Uncaught SyntaxError: Unexpected token u 

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

Я не понимаю, как это может быть проблема с перекрестным доменом. Когда я удалить проверку подлинности из URL, то этот код работает отлично:

 $.ajax({ 
     type:'GET', 
     url: 'http://'+domainName+':9898/*/*', 
     dataType:"json", 
     async: false 
     }).responseText; 

Но как только я проверить подлинность URL код не удается, после применения выше шагов тоже код не удается.

+1

У вас проблема с перекрестным доменом. Попробуйте свою первую версию с dataType «jsonp» и дополнительную опцию xhrFields: { withCredentials: true } Читайте здесь для получения дополнительной информации по теме: http://stackoverflow.com/questions/5750696/how-to-get-a -cross-origin-resource-sharing-cors-post-request-working – bouscher

+0

@bouscher я пытался с jsonp, но это даже дает ошибку как неожиданное исключение. –

+0

Возможно, это связано с тем, что сервер не отвечает в json формате. Вы пытались использовать POST вместо GET, а также уверены, что порт 9898 верен? Кажется, он используется для протокола UDP/TCP, а не HTTP. Также попробуйте сделать правильную ошибку: error: function (httpReq, status, exception) { alert (статус + "" + исключение); }, чтобы лучше отлаживать – bouscher

ответ

0

Try дополнительного параметра JQuery Ajax:

xhrFields: { withCredentials: true }

Это позволит функциональность Корса.

0

попробуйте удалить данныеТип: "json" из метода ajax. Возможно, серверные методы получают строку json, но не используют json content-type

+0

Ответ сервера в формате json. Я попытался просто нажать на url. Я получаю значение в формате json после ввода имени пользователя и пароля во всплывающем окне. –

0

Нет необходимости в jsonp. Я получил его с помощью этого: установка

$.ajax({ 
    xhrFields: { withCredentials: true }, 
    type:'GET', 
    url: 'http://'+domainName+':9898/jolokia/*/*', 
    dataType:"json", 
    crossDomain: true, 
     async: false 
     }).responseText; 
Смежные вопросы