我想知道如何使用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的引用,我将不胜感激。我搜索了一下,却一无所获。
编辑:经过一些测试后,我发现有时第二种方法有时会起作用,有时则不然。不知道为什么或在什么情况下。答案 0 :(得分:2)
如果您不希望客户端访问某些文件,最好的方法是不要部署它们,或将它们部署在war WEB-INF
或META-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。这将允许您使用另一台服务器(真实的或虚拟的)并以这种方式设置其连接属性,除此之外没有其他人可以访问它。
祝你好运!