如何使用Servlet过滤器来更改来自的传入Servlet请求网址
http://nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123
至
http://nm-java.appspot.com/Check_License?Contact_Id=My_Obj_123
?
更新:根据BalusC的以下步骤,我想到了以下代码:
public class UrlRewriteFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
//
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String requestURI = request.getRequestURI();
if (requestURI.startsWith("/Check_License/Dir_My_App/")) {
String toReplace = requestURI.substring(requestURI.indexOf("/Dir_My_App"), requestURI.lastIndexOf("/") + 1);
String newURI = requestURI.replace(toReplace, "?Contact_Id=");
req.getRequestDispatcher(newURI).forward(req, res);
} else {
chain.doFilter(req, res);
}
}
@Override
public void destroy() {
//
}
}
相关条目web.xml
如下所示:
<filter>
<filter-name>urlRewriteFilter</filter-name>
<filter-class>com.example.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>urlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
我尝试了服务器端和客户端重定向,均获得了预期的结果。它成功了,谢谢BalusC!
相关问题:stackoverflow.com/questions/2723829/…–
—
BalusC
您正在使用哪个版本的servlet规范?您转发请求的方式会随不同版本而变化。
—
罗曼·希波
请注意,如果原始URL包含参数,即nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123?** param1 = A&param2 = B **,那么这些参数也将转发到下一个servlet / jsp。我没有找到摆脱或替换原始参数的方法(仅通过使用HttpServletRequestWrapper)。有什么想法吗?更新:看来http://ocpsoft.org/opensource/how-to-safe-add-modify-servlet-request-parameter-values/解决了这个问题。
—
罗布敦2012年
谢谢,我正在寻找有关URL重写和加密的示例。
—
阿迪亚亚达(Aditya Yada)