Tomcat虚拟主机&通配符dns匹配

时间:2014-03-16 16:00:50

标签: java java-ee tomcat tomcat7

我创建了一个应用程序,它需要接受通配符dns并使用该通配符值向数据库请求。我试图为自己模拟一个虚拟环境来实现我想要的东西:

1)在我的Linux操作系统中,我更改了/ etc / hosts并添加以下行:

127.0.0.1   test-domain.com
127.0.0.1   mehdi.test-domain.com

2)我更改了我的tomcat server.xml文件,如下所示:

<Host name="test-domain.com" 
    appBase="webapps/ROOT" 
    unpackWARs="true" 
    autoDeploy="true"
    xmlValidation="false" 
    xmlNamespaceAware="false">
    <Alias>www.test-domain.com</Alias>
    <Context path="" docBase="."/>
</Host>

<Host name="*.test-domain.com" 
        appBase="webapps/ROOT" 
        unpackWARs="true" 
        autoDeploy="true"
        xmlValidation="false" 
        xmlNamespaceAware="false">
        <Alias>*.test-domain.com</Alias>
        <Context path="" docBase="."/>
</Host> 

3)我将项目war文件'Root.war'部署到$ {TOMCAT} / webapps / ROOT文件夹

现在当我请求“ www.test-domain.com ”时,我看到了网页主页,当我输入此网址时,我想要“ mehdi .test-domain.com “,我从URL中获取mehdi并使用它执行某些操作并向我的用户显示mehdi页面。

问题1:如何在应用程序中获取通配符值?

问题2:我们是否有可能让tomcat在运行时将请求URL转换为其他内容并将其传递给应用程序(我需要通配符值ex:mehdi)?

  

http://mehdi.test-domain.com转为http://test-domain.com/mehdi

问题3:是否可以只有第二个&lt;主机名= ... 定义并删除第一个?我怎么能在我的应用程序中处理它?<​​/ p>

1 个答案:

答案 0 :(得分:1)

Q1:使用request.getServerName()

Q2:您可以使用UrlRewrite过滤器或类似的

问题3:不支持AFAIK通配符,因此您需要单个主机名=&#34; localhost&#34;这将收到所有请求 另请参阅How to host random or wildcard subdomains on Tomcat and Java