使用Jetty在ServletFilter中进行URL重写

时间:2012-12-11 23:06:16

标签: url-rewriting jetty servlet-filters

我需要在ServletFilter中进行URL重写,以便" foo.domain.com"被重写为" foo.domain.com/foo"。我使用Jetty,它有一种方便的方法来修改请求:只需将请求转换为Jetty Request对象,你就会得到一堆允许你修改它的setter。这是我的代码(不起作用):

String subdom = Util.getSubDomain(req);
org.eclipse.jetty.server.Request jettyReq = (Request) req;
String oldUri = jettyReq.getRequestURI();
String newUri = "/" + subdom + oldUri;
jettyReq.setRequestURI(newUri);

我的目的是从/ foo目录中提供文件,该目录位于/ webapps / root / foo。

我猜我还需要调用setContextPath(),setPathInfo(),setURI(),setServletPath()之类的东西,以及谁知道还有什么。

什么样的神奇组合会使原来的请求看起来像/ foo?

编辑:澄清一下,我说代码无法正常工作的原因是文件仍在/ webapps / root中提供,而不是/ webapps / root / foo。< / p>

2 个答案:

答案 0 :(得分:1)

只需使用重写处理程序,我们就支持你要做的事情:

http://wiki.eclipse.org/Jetty/Feature/Rewrite_Handler

答案 1 :(得分:1)

回答我自己的问题:我错过了

jettyReq.setServletPath(newUri); 

添加它,一切正常。