提前感谢所有人 -
我如何通过文件类型禁止通过浏览器进行访问?
例如,如果我想禁用对.xml文件的所有访问,我将如何进行此操作?
由于
答案 0 :(得分:3)
我自己想要一个答案,并且不满意JDBCRealm的答案。
默认隐藏文件夹“WEB-INF”和“META-INF”在静态资源逻辑中是硬编码的,因此使用相同的机制似乎非常困难。您必须替换或修改DefaultServlet,StandardContext和StandardContextValve的某些组合。这是一团糟。
但我尝试了两种简单的方法来完成你所追求的过滤。
使用Filter
您可以编写一个通用Servlet过滤器,以便为匹配某些列表的任何文件返回404错误。您可以将该列表设置为context.xml中的Environment Entries,类路径上的properties file,存储在数据库中,或者您喜欢的任何内容(即使是硬编码的字符串,如果您是某种类型的话)受虐狂)。
使用Valve (特定于Tomcat)
Tomcat Valves与Filters相同,但处于较低级别。它们不属于Servlet Spec,因此您的应用程序无法移植到其他Servlet容器中。此外,在我的实验中,发送404响应不会通过与应用程序中正常发送的404响应相同的通道(例如,如果您设置自定义404页面或处理程序,则当404从Valve返回时不使用它们)
答案 1 :(得分:3)
甚至更简单的方法。您只需将具有特定扩展名的所有请求重定向到一些空的servlet。
像这样:
<servlet-mapping>
<servlet-name>Empty Servlet</servlet-name>
<url-pattern>*.xml</url-pattern>
</servlet-mapping>
答案 2 :(得分:1)
对于没有相应servlet声明的不接受servlet映射的Tomcat,这不起作用。 我建议编写一个简单的ErrorServlet,系统地发送404,如:
package com.yourpackage;
public class ErrorServlet extends HttpServlet{
public ErrorServlet(){
}
public void service(HttpServletRequest request, HttpServletResponse response){
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
}
然后在web.xml文件中添加相应的配置:
<servlet>
<description>Servlet that displays a 404</description>
<display-name>error</display-name>
<servlet-class>com.yourpackage.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>*.xhmtl</url-pattern>
</servlet-mapping>
答案 3 :(得分:0)
据我所知,没有直截了当的解决办法。最后of this post解释了如何使用JDBCRealm围绕您选举的某些文件创建安全上下文。如果用户尝试访问与您的模式匹配的文件(在您的情况下为* .xml),则会将其重定向到登录页面或错误页面。