2011-06-28 27 views
0

從stackoverflow閱讀各種帖子和其他人的幫助後,我在我的代碼中進行身份驗證,並試圖避免以前發生的重定向,因爲我是所有這些東西的新手。我開始收到302 Found的錯誤,文檔已移動。該文檔已移動錯誤

我想通過在jsp中編寫一些代理代碼在本地從我的計算機向其他域調用ajax。這是我調用proxy.jsp頁面的jQuery AJAX代碼。

var search_agile_metadata = 'https://doc.xyz.com/rest-services/services/get?id='; 

var on_show_info = function() { 
var outOfDomainCall = search_agile_metadata + current_doc.id;//An XML document 

request_meta_info = $.ajax({ 
url: "proxy.jsp?url=" + outOfDomainCall, 
       type: 'GET', 
       success: on_get_metadata, 
       error: on_get_metadata_error 

     }); 

而且我proxy.jsp文件是: -

<%@ page language="java" import="org.apache.http.impl.client.AbstractHttpClient, 
org.apache.http.client.methods.HttpUriRequest, 
org.apache.http.client.methods.HttpGet, 
org.apache.http.protocol.HttpContext, 
org.apache.http.impl.client.DefaultHttpClient, 
org.apache.http.HttpResponse 
,org.apache.http.HttpRequest, 
java.net.HttpURLConnection, 
java.net.URL, 
java.util.Collection, 
org.apache.commons.httpclient.HttpClient, 
org.w3c.dom.*, 
javax.xml.parsers.DocumentBuilder, 
javax.xml.parsers.DocumentBuilderFactory, 
java.net.*, 
java.io.*, 
org.apache.http.protocol.BasicHttpContext, 
org.apache.http.params.BasicHttpParams, 
org.apache.http.params.HttpParams, 
org.apache.http.Header, 
org.apache.http.client.params.HttpClientParams" 
contentType="text/html; charset=ISO-8859-1" 
pageEncoding="ISO-8859-1"%> 

<% 
String a_Url = request.getParameter("url") ; 

URL url = new URL (a_Url); 
String encoding = new String(
     org.apache.commons.codec.binary.Base64.encodeBase64 
      (org.apache.commons.codec.binary.StringUtils.getBytesUtf8("test:test")) 
     ); 


HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 
connection.setRequestMethod("GET"); 
connection.setDoOutput(true); 
connection.setFollowRedirects(false); 
connection.setRequestProperty ("Authorization", "Basic " + encoding); 
InputStream content = (InputStream)connection.getInputStream(); 
BufferedReader in = 
    new BufferedReader (new InputStreamReader (content)); 
String line; 
while ((line = in.readLine()) != null) { 
    out.println(line); 
} 

%> 

<% 
final HttpParams params = new BasicHttpParams(); 
HttpClientParams.setRedirecting(params, false); 
%> 

當我得到響應從服務器返回。我得到這個錯誤。任何想法,爲什麼我收到此錯誤回來..

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>302 Found</title> 
</head><body> 
<h1>Found</h1> 
<p>The document has moved <a href="https://login.xyz.com/siteminder/cert/13890/smgetcred.scc?TYPE=16777217&amp;REALM=-SM-amp;SMAUTHREASON=0&amp;METHOD=GET&amp;SMAGENTNAME=-SM-3FfhzbcpbcT6grIIICnrPzvFIbogCZlcnVHG8&amp;TARGET</p> 
<hr> 
<address>Apache/2.0.58 (Unix) DAV/2 mod_jk/1.2.28 Server at doc.xyz.com Port 80</address> 
</body></html> 

任何幫助將不勝感激..

+0

「HTTP 401」的意思是「未經授權」,正如你可能知道的那樣,你嘗試訪問的url似乎有點複雜 - 部分原因是它使用https協議,部分原因是「nocert」的事情,我不知道它是什麼。您是否嘗試過更簡單的網址,例如「http://www.gnu.org/」或其他? –

+0

@AndréLaszlo,它的工作更簡單的網址..我試着用這個XML文件'http:// www.w3schools.com/xml/note.xml' – ferhan

+0

我看不出你的代碼有什麼問題。你有沒有嘗試過另一個https網址?您是否在瀏覽器中嘗試過有問題的網址? –

回答

2

我不認爲這是HTTPS被搞亂你這麼多,但401是未經授權鑰匙。檢查協議的內容:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4.2。某種程度上,您的請求需要考慮授權標題。我過去用HttpClient庫完成了這項工作:http://hc.apache.org/httpclient-3.x/authentication.html

+0

感謝您的回覆。所以這意味着我必須在我的JSP中使用http客戶端庫,以及如何在我的上述JSP中使用此庫。任何例子將不勝感激.. – ferhan

+0

這並不意味着你必須使用HttpClient。你需要做的是在你的請求中提供一個Authentication標頭。我不確定你如何使用簡潔的URL來做到這一點,所以我推薦HttpClient,因爲我發現它是一個非常方便的方法。只需下載HttpClient庫並通過示例驅動。它不是太困難。以下是他們的基本身份驗證示例的鏈接:http://svn.apache.org/viewvc/httpcomponents/oac.hc3x/trunk/src/examples/BasicAuthenticationExample.java?view=markup –

+0

哦,是的,要導入到JSP只需將導入指令放在JSP的頂部即可。 <%@ page import「org.apache.commons.httpclient。*,org.apache.commons.httpclient.auth.AuthScope,org.apache.commons.httpclient.methods.GetMethod;」 %>並將JAR本身放在WEB-INF/lib中 –