Tomcat 7中的URL重写

4

我打算开发一款内部网络应用程序(Java客户端,JSP,SQLite)

其目的是当用户点击链接时,如果用户有权限(由业务逻辑处理的团队),则提供文件下载

数据库中有一个表格保存信息,下面是示例行:

ID | file                               | team   | md5
1  | D:\test\output_20140915_100012.zip | Falcon | 5cceaf4cc400fd8f5c7fb4b2af754f4093369f59

其中MD5是字符串"D:\test\output.zip"的MD5校验和,而不是文件本身的校验和。

我只是为了得到一个随机数而创建了MD5。我不使用RAND的原因是为了避免碰撞(这部分很简单)。

我希望我的URL看起来像这样

http://mywebserver:8080/<appname>/5cceaf4cc400fd8f5c7fb4b2af754f4093369f59

哪些步骤应该采取来…
http://mywebserver:8080/<appname>/download.jsp?id=5cceaf4cc400fd8f5c7fb4b2af754f4093369f59

我正在使用Tomcat,想知道如何针对这种情况进行URL重写


1
你确定不想在Web服务器层面上(例如Apache,nginx)完成这个操作吗?这样会更简单。 - Makoto
@Makoto 你是指重定向吗? - KK99
我不知道为什么你要在Web服务器上这样做。这可以通过路由器在应用程序中更好地处理。例如,Spring的@PathVariable http://www.journaldev.com/3358/spring-mvc-requestmapping-annotation-example-with-controller-methods-headers-params-requestparam-pathvariable - James Sumners
2个回答

8
我建议您使用Apache HTTP服务器或其他服务器来完成这项任务。但如果您只想使用Tomcat 7,可以使用Tuckey UrlRewriteFilter
这是一个Java Web过滤器,适用于任何兼容的Web应用程序服务器(如Tomcat、JBoss、Jetty或Resin),可以在代码处理URL之前重写URL。它就像Apache的mod_rewrite一样,是一个非常强大的工具。
这个过滤器可以让您定义规则,例如:

Clean a url

<rule>
    <from>/products/([0-9]+)</from>
    <to>/products/index.jsp?product_id=$1</to> 
</rule> 

eg, /products/1234 will be passed on to /products/index.jsp?product_id=1234 without the user noticing

来自Tuckey urlrewrite示例

自Tomcat 8开始,您可以使用重写阀门。

重写阀门以非常类似于Apache HTTP服务器的mod_rewrite的方式实现URL重写功能。

Rewrite Valve文档


我们只使用Tomcat,因此我想问在Tomcat 7中的情况。 - KK99
好的,在编辑之前的原始问题中没有提到Tomcat版本。在这种情况下,可以尝试使用Tuckey UrlRewriteFilter http://tuckey.org/urlrewrite/。稍后我会编辑我的答案。 - Tobías
注意到你的链接后,我才意识到我没有提到Tomcat版本。抱歉。 - KK99

2
对于Tomcat 7,您还可以使用tuckey。Tuckey是一个Java Web过滤器,适用于任何兼容的Web应用程序服务器,并允许像Apache一样使用mod_rewrite。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接