我在 Tomcat 服务器中部署了一个 Web 应用程序,前面是 Apache。要求之一是必须可以使用两条不同的路径访问 webapp。例如:
http://domain.com/aa/bb/v1/*
and
http://domain.com/cc/v1/*
我的 webapp 配置了第一个 URL,因此任何对/aa/bb/v1/* 的请求都由 Tomcat 正确处理。
然后,为了能够将对第二个 URL 的调用“转发”到第一个 URL,我在 apache 中使用了 mod_rewrite,如下所示:
RewriteEngine on
RewriteRule /aa/bb/v1/(.+) cc/v1/$1 [NC,L,P]
这很好用!除非我在 Tomcat 中激活摘要式身份验证。在摘要中,浏览器发送的密码是一些或多或少复杂的哈希值,包括用户名、领域和 URI 等。浏览器的 URI 不是 webapp 的 URI(我用 mod_rewrite 修改了它)所以认证失败。
关于如何解决这个问题有什么想法吗?
最佳答案
我终于找到了一个简单的解决方案。 Tomcat 的 Digest 阀的可配置值之一是不验证 URI。这可以通过在 context.xml 文件中添加摘要阀配置来完成:
<Context>
<!-- Default set of monitored resources -->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Valve className="org.apache.catalina.authenticator.DigestAuthenticator" validateUri="false" />
......
我不确定是否有人会说这是不安全的......但是,对我来说已经足够了。
关于Apache mod_rewrite 和 Tomcat 摘要认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27231331/