Tomcat 7中的URLRewrite

KK9*_*K99 4 java tomcat

我打算开发一个Intranet应用程序(Java客户端,JSP,SQLite)

这样做的目的是当用户点击链接时,如果用户有权访问(对于在业务逻辑中处理的团队),则应提供一个文件供下载

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

ID | file                               | team   | md5
1  | D:\test\output_20140915_100012.zip | Falcon | 5cceaf4cc400fd8f5c7fb4b2af754f4093369f59
Run Code Online (Sandbox Code Playgroud)

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

我只是为了拥有随机数而创建MD5.我不使用RAND的原因是为了避免碰撞(这部分是微不足道的)

我希望我的网址看起来像这样

http://mywebserver:8080/<appname>/5cceaf4cc400fd8f5c7fb4b2af754f4093369f59
Run Code Online (Sandbox Code Playgroud)

应该采取哪些措施

http://mywebserver:8080/<appname>/download.jsp?id=5cceaf4cc400fd8f5c7fb4b2af754f4093369f59
Run Code Online (Sandbox Code Playgroud)

我正在使用Tomcat,我想知道如何为这个场景重写URL

Tob*_*ías 8

我建议使用Apache HTTP Server或其他服务器.但是如果你只想用Tomcat 7做这件事,请使用Tuckey UrlRewriteFilter:

适用于任何兼容的Web应用程序服务器(如Tomcat,JBoss,Jetty或Resin)的Java Web Filter,它允许您在访问代码之前重写URL.它就像Apache的mod_rewrite一样非常强大.

此过滤器允许您定义以下规则:

清理网址

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

例如,/ products/1234将被传递到/products/index.jsp?product_id=1234而无需用户注意

来自Tuckey urlrewrite的例子

从Tomcat 8开始,您可以使用重写阀.

重写阀以与Apache HTTP Server中的mod_rewrite非常相似的方式实现URL重写功能.

重写Valve文档