我正在计划一个 URL 重写器/编码器(也许重写器是一个更好的术语)。主要目的是向客户端隐藏确切的 URL,因为如果他足够聪明,他可以弄清楚如何搞乱应用程序。
URL 编码器将是一个单射函数 f(x) = y
。解码器将是f的反函数,例如g,使得g(y) = x
。这样我就可以对 URL 进行编码和解码。
网址如下:
http://www.myapp.com/servlet/myapp/template/MyScreen.vm/action/MyAction 将被编码为如下内容:
http://www.myapp.com/uyatsd6787asv6dyuasgbdxuasydgb876876v
只要无法理解,编码后的 URL 中的内容并不重要。
问题是我不知道如何操作浏览器显示的 URL。我使用 JBoss 作为 servlet 容器,使用 Turbine servlet 作为 Web 应用程序框架。 我需要一个模块来接收编码的 URL,对其进行解码,将其传递给 Turbine,然后修改响应的 URL 以再次显示编码的 URL。
之前解决该问题的尝试: 我创建了一个 servlet 过滤器,但无法访问该 URL,因为该过滤器接收到一个 JBoss 实现的 ServletRequest。据我所知,Servlet 过滤器似乎不是操作 URL 的好选择。
最佳答案
也许您可以编写一个 servlet 来接受初始请求、解码 URL,然后在内部转发到现有的 servlet。
例如,有一个 servlet 将接受:
www.myapp.com/enc/uyatsd6787asv6dyuasgbdxuasydgb876876v
此 servlet 可以设置为处理以/enc/或其他标记开头的请求,以指示 URL 需要转到解码器 servlet。它将解码为 URL:
/servlet/myapp/template/MyScreen.vm/action/MyAction
然后使用以下内容在现有 servlet 上内部转发到此 URL:
getServletContext().getRequestDispatcher(decoded_url).forward(req, res);
关于java - URL编码的设计方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3716179/