我的公共Web应用程序有一个特殊的servlet,用于生成已发布文档的摘要,并将它们保存到服务器上的已配置文件路径中。此servlet只能由应用程序管理员指定的ip提供。
我希望这种东西可以通过tomcats安全管理器配置(一个特殊的servlet / url应该只是“监听”特定的ip-(范围))。这可能吗?
或者一般来说:我不想在我的代码中实现“安全性”(它自己的servlet可以过滤ip)。它应该是容器配置或系统配置的问题。
所以如何实现
答案 0 :(得分:1)
Tomcat已经附带Remote Address Filter valve来过滤所有请求以匹配模式。如果您只需要为单个URI提供过滤,则最好扩展RequestFilterValve
类并将逻辑嵌入到扩展中。像这样的东西应该工作(没有在本地测试,但你应该能够得到这个想法):
public class YourValve extends org.apache.catalina.valves.RequestFilterValve {
public void invoke(Request request, Response response) throws IOException, ServletException {
if (request.getRequestURI().startsWith("/path/to/your/secure/servlet") {
process(request.getRequest().getRemoteAddr(), request, response);
} else {
// no need to filter anything
}
}
}
您必须配置此阀门以提供allow
正则表达式,如Remote Address Filter文档中所述。它可能像
<Valve className="YourValve" allow="127\.\d+\.\d+\.\d+"/>
(上面只允许localhost)
This article,第4.1章解释了如何安装阀门。