2014-03-05 77 views
0

我在寫一個servlet過濾器來根據某些條件轉發Jersy請求。但他們似乎並沒有轉發。使用過濾器轉發請求到另一個休息服務

public class SampleFilter 
    extends GenericFilterBean 
{  
    @Override 
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) 
     throws IOException, ServletException 
    { 
     String generateRedirectUrl=FormURL((HttpServletRequest)req); 
     RequestDispatcher dispatcher = req.getRequestDispatcher(generateRedirectUrl);   
     dispatcher.forward(req, resp);   

    } 

    private String FormURL(HttpServletRequest req) 
    { 
     // get the request check if it contains the customer 
     String reqUrl = req.getRequestURI(); 
     log.info("Original Url is"+reqUrl); 
     if(reqUrl.contains("test")) 
     { 
      return "/api/abcd/" +"test"; 
     } 
     return "Someurl"; 

    } 

} 

我需要轉發網址如下。

Original: http://localhost/api/test/1234/true 

New URL:http://localhost/api/abcd/1234/true 

我是否在做任何錯誤的事情。

回答

1

「我做錯了什麼?」

一般來說,我認爲這將起作用 - 您可以從過濾器轉發,但您的邏輯錯誤。

使用下面的規則:

Original: http://localhost/api/test/1234/true 
New URL:http://localhost/api/abcd/1234/true 

代碼:

if(reqUrl.contains("test")) 
    { 
     return "/api/abcd/" +"test"; 
    } 

會產生/api/abcd/test這是你沒有什麼之後。

我會做類似如下:

private String formURL(HttpServletRequest req) { 
    // get the request check if it contains the customer 
    String reqUrl = req.getRequestURI(); 
    if (log.isInfoEnabled() { 
     log.info("Original Url is"+reqUrl); 
    } 
    if(reqUrl.contains("test")) { 
     return reqUrl.replace("test", "abcd"); 
    } 
    return "Someurl"; 

而且,代碼是非常殘酷的。這也將改變URL

http://test.site.com/abd/defhttp://abcd.site.com/abd/def

這可能不是你想要的。你可能需要做更聰明的字符串操作,或者轉換成類似URI的類,這將允許你更準確地定位路徑。

希望這有助於

威爾

相關問題