2013-02-01 48 views
2

我對servlet非常陌生,並且希望執行以下操作。更改servlet標題並重定向到過濾器中的其他url

我有一個過濾器在我的地方設置:當某些網址與模式匹配

void doFilter(ServletRequest request, 
       ServletResponse response, 
       FilterChain chain) throws IOException, ServletException 
{ 
} 

這些過濾器將被調用。

在此方法中,我要做到這一點:通過將authenticaton鑰匙我知道

  • 而且隨着地方認證頭重定向request

    1. 更改來電request頭其他網址如www.test.com,以便該特定請求的響應將是www.test.com的結果

    是否可以這樣做?

    我嘗試這些:

    response.setHeader("WWW-Authenticate","Basic MyKey") 
    response.setHeader("Location","www.google.com") 
    

    但畢竟這是我應該做的?如何將網頁重定向到google.com?

    在此先感謝。

  • +0

    是的,它是可能的。 *你*嘗試過什麼? –

    +0

    我試着爲'request'對象設置授權頭。但我沒有找到任何方法http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html – sriram

    +0

    對不起,我錯了'RequestDispatcher'使用 - 你couldn用它發送到遠程服務器。我不知道,如何將自定義標題的請求轉發到你的'ServletContext'中。我發現沒有答案類似的問題http://stackoverflow.com/questions/10860569/forward-a-servlet-request-to-another-server。也許這是不可能的? – bsiamionau

    回答

    1

    這是(幸運的)不可能的。如果您可以通過Web服務器控制Web客戶端向任意域發起的HTTP請求的標頭,這將是一個巨大的安全漏洞。這將使釣魚攻擊非常容易。

    爲了達到您的需要,您最好的選擇是充當代理人。使用例如編程方式自己創建並激活HTTP請求。 URLConnection或Apache HTTPComponents客戶端,並管理其對servlet響應的響應。但請注意,瀏覽器地址欄中的URL保留您的Web服務器的URL。

    下面是使用URLConnection開球例如:

    URLConnection connection = new URL("http://other.com").openConnection(); 
    // Set headers if necessary via setRequestProperty(). 
    
    InputStream input = connection.getInputStream(); 
    OutputStream output = response.getOutputStream(); 
    // Copy response body from input to output. 
    
    相關問題