我正在计划一个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。我使用JBoss作为servlet容器,使用Turbine servlet作为Web应用程序框架。 我需要一个接收编码URL的模块,对其进行解码,将其传递给Turbine,然后修改响应的URL以再次显示编码的URL。
以前尝试解决问题: 我已经创建了一个servlet过滤器,但我无法访问该URL,因为过滤器接收的是一个JBoss实现的ServletRequest。据我所知,似乎servlet过滤器不是操作URL的好选择。
答案 0 :(得分:2)
也许你可以做一些事情,比如写一个接受初始请求的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);