web.xml中的服务器端重定向?

时间:2012-03-26 03:33:46

标签: java servlets web.xml

我想知道如何使用GWT隐藏存储在服务器上的某些文件。我有密码等数据库,我需要将用户从数据库重定向到其他页面。我该怎么做?

我尝试在web.xml中更改内容:

<servlet-mapping>
    <servlet-name>SomeServer</servlet-name>
    <url-pattern>/actual_url</url-pattern>
    <url-pattern>/database1.db</url-pattern>
    <url-pattern>/database2.db</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>SomeServer</servlet-name>
    <url-pattern>/actual_url</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>SomeServer</servlet-name>
    <url-pattern>/database1.db</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>SomeServer</servlet-name>
    <url-pattern>/database2.db</url-pattern>
</servlet-mapping>

两者都允许在actual_url上访问servlet,但我仍然可以访问database1.db和database2.db。

我知道我可以使用.htaccess为Apache隐藏这些文件,但我更喜欢GWT解决方案。有没有人有任何想法?

此外,如果任何人都可以找到web.xml的引用,我将不胜感激。我搜索了一下,却一无所获。

编辑:经过一些测试后,我发现有时第二种方法有时会起作用,有时则不然。不知道为什么或在什么情况下。

2 个答案:

答案 0 :(得分:2)

如果您不希望客户端访问某些文件,最好的方法是不要部署它们,或将它们部署在war WEB-INFMETA-INF个特殊文件夹中。

如果您必须在WEB-INF之外部署它们,则可以使用security-constraints限制对它们的访问:

<security-constraint>
   <display-name>Denied</display-name>
   <web-resource-collection>
      <web-resource-name/> <!-- mandatory, but can be empty -->
      <url-pattern>/database1.db</url-pattern>
      <url-pattern>/database2.db</url-pattern>
      <!-- alternatively, you could simply use:
         <url-pattern>*.db</url-pattern>
      -->
   </web-resource-collection>
   <auth-constraint>
      <!-- an empty but not absent auth-constraint denies everyone -->
   </auth-constraint>
</security-constraint>

请注意,如果您使用的是AppEngine,则会专门提供静态文件,除非您在web.xml中列出静态文件,否​​则appengine-web.xml不适用于他们(请参阅{{3}中的说明) },并参见http://code.google.com/appengine/docs/java/config/webxml.html#Servlets_and_URL_Paths

答案 1 :(得分:0)

就我而言,GWT的服务器端代码是纯Java EE。所以看来,你只需要查看Java EE规范就可以找到答案了 另一个建议是在单独的应用程序中部署数据库访问servlet。这将允许您使用另一台服务器(真实的或虚拟的)并以这种方式设置其连接属性,除此之外没有其他人可以访问它。
祝你好运!