我们的应用程序中有一个现有的 Jersey REST 服务(URL:/rest/*)。示例 URL 如下所示:http://xxx:8080/app/rest/company/getdata
基于一个属性,我们需要将 REST 调用重定向到另一个上下文(URL:/newrest/*):示例 URL 如下所示:http://xxx:8080/app/newrest/company/getdata
因此,我在 web.xml 中添加了一个 servlet 映射。
所以,我的 web.xml 看起来像下面的代码片段。
<servlet>
<servlet-name>ServletAdaptor</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>xxx.httpservice</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<filter>
<filter-name>secureRESTFilter</filter-name>
<filter-class>xxx.RESTSecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>secureRESTFilter</filter-name>
<url-pattern>/rest/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>NewAdaptor</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>xxx.newhttpservice</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>NewAdaptor</servlet-name>
<url-pattern>/newrest/*</url-pattern>
</servlet-mapping>
我已经编写了一个过滤器(用于检查 ServletAdaptor servlet 上的属性,如果需要,我需要重定向到 NewAdaptor servlet。此外,最终响应应该由 Servlet Adapter servlet 使用来自 NewAdaptor servlet 的响应发回,如果必要的(基于属性)。
我需要解决这个问题的方向。请帮忙。
我的过滤器类中的 dofilter 方法如下所示:
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String productMode = "b";//hardcoded for this example
String url = request.getRequestURL().toString();
if(productMode.equals("a")){
chain.doFilter(req, res);
}else{
url=url.replace("rest", "newrest");
req.getRequestDispatcher(url).forward(req, res);
}
}
但是 RequestDispatcher 似乎没有将请求转发到新的 url。