【问题标题】:Design solution for URL encodingURL编码的设计方案
【发布时间】:2011-04-12 14:02:01
【问题描述】:

我正在计划一个 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 的好选择。

【问题讨论】:

    标签: java jboss url-rewriting urlencode


    【解决方案1】:

    也许您可以编写一个 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);
    

    【讨论】:

    • 如果我在内部转发到解码的 URL,浏览器中的 URL 是否仍然是原始(编码)的?
    • 浏览器的 URL 应该保持不变,因为您的 serlvet 是在内部转发而不是向用户发送重定向。
    • 这似乎是一个很好的解决方案,但是您必须创建一个新请求,因为在第一个请求之后,Turbine servlet 将知道其 url 模式并且所有链接都将指向 Turbine servlet。因此,您必须创建一个新的包装请求,该请求会覆盖 getServletPath() 方法以返回新的 url 模式,比如说过滤器 servlet,它将请求转发到正确的目的地。
    猜你喜欢
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多