2016-08-02 10 views
0

Google Maps API用のTileOverlayを作成する際に、ユーザー/パスが必要な別のホストでホストされているカスタムマップタイルにアクセスしたいと思います。ImageMapType JavascriptのgetTileUrlにオーソライゼーションヘッダーを追加する方法

だからこれは私の現在のコードのJavascriptです:

var carte = new google.maps.ImageMapType({ 
    getTileUrl: function (tileCoord, zoom) { 
     var url = "http://host.com/" + (zoom + 1) + "/" + (tileCoord.x + 1) + ":" + (tileCoord.y + 1) + "/tile.png"; 
     return url; 
    }, 
    tileSize: new google.maps.Size(256, 256), 
    minZoom: 8, 
    opacity: 0.6 
}); 
map.overlayMapTypes.push(carte); 

接続が401 Anauthorizedを返すので、私はタイルにアクセスすることはできません。 Javascript/JqueryでAuthorizationヘッダーを渡して、それらのタイルにアクセスする権限があることをURLに伝えることはできますか?

は、私はこのような解決策を探しますが、JavaScriptでいます:Adding an Authorization header in getTileUrl for Maps Tile Androidユーザエージェントは、それがAuthorizationフィールドを使用して、サーバーの認証資格情報を送信したい

+0

あなたはこのを探していますか? https://developers.google.com/maps/documentation/javascript/get-api-key?hl=en –

+0

私はこのようなソリューションを探しています:http://stackoverflow.com/questions/34739880/adding-an -authorization-header-in-gettileurl-for-maps-tile-androidではなくJavascriptで表示されます。 – Ulyanca

答えて

1

私はプロキシをimpementingことで解決策を見つけました。ここ は、コードがimplemetedされています。私のコントローラの

var carte = new google.maps.ImageMapType({ 
     getTileUrl: function (tileCoord, zoom) { 
      return 'http://myhost/myController/getTile?url=http://externe_url/' + (zoom + 1) + "/" + (tileCoord.x + 1) + ":" + (tileCoord.y + 1) + "/tile.png"; 
     }, 
     tileSize: new google.maps.Size(256, 256), 
     minZoom: 8, 
     opacity: 0.6 
    }); 

コード:

def getTile() { 
def result 
try { 
    def http = new HTTPBuilder() 
    try { 
     http.setHeaders([Authorization: 'Basic ' + 'user:pass'.bytes.encodeBase64().toString()]) 
     http.request(params.url, Method.GET, ContentType.BINARY) { req -> 
      response.success = { resp, retour -> 
       result = retour.bytes 
      } 
     } 
    } catch (IOException | URISyntaxException e) { } 
} 

if(result) { 
    // on renvoie au navigateur le contenu de l'image 
    response.status = HttpServletResponse.SC_OK 
    response.contentType = 'image/x-png' 
    response.outputStream << result 
    response.outputStream.flush() 
} 
else { 
    response.status = HttpServletResponse.SC_NO_CONTENT 
} 
} 
1

ユーザ名とパスワードは1つのコロンと組み合わされて、次のよう

Authorizationフィールドが構築されます。 結果の文字列は、Base64のRFC2045-MIMEバリアントを使用してエンコードされます(ただし、76文字/行に限定されません)。 許可方法とスペース、すなわち「基本」が符号化された文字列の前に置かれます。

出典:Http Authentication

$.ajax({ 
     type: // POST OR GET, 
     url: //your url, 
     headers: { 
      Authorization:"Basic "+new Buffer(name+':'+pass).toString('base64'), 
      "Content-Type" : //according to you 
     } 
     }) 
     .done(function(data) { }); 
+0

このコードでは質問に答えることができますが、* how *および/または* why *が問題を解決するための追加のコンテキストを提供すると、回答の長期的価値が向上します。 –

+0

彼はjavascript/jqueryで認証ヘッダを渡す方法を尋ねました。 –

+0

投稿されたコードが質問に答えても、良い答えが**なぜコードが問題を解決するのかを説明するのに役立ちます。コードのみの回答は、StackOverflowで低品質とみなされます。 –

関連する問題