【问题标题】:Forward request to another rest service using filter使用过滤器将请求转发到另一个休息服务
【发布时间】:2014-04-07 07:08:52
【问题描述】:

我正在编写一个 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

我做错了什么吗?

【问题讨论】:

    标签: java rest servlets jersey-2.0


    【解决方案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 的类,这样您就可以更准确地定位路径。

    希望对你有帮助,

    【讨论】:

      猜你喜欢
      • 2012-06-07
      • 2012-04-23
      • 2012-12-27
      • 1970-01-01
      • 2022-12-10
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      相关资源
      最近更新 更多