我希望人们不介意我提出一个稍微未来凝视的问题。如果我的理解不正确,请原谅我(请告诉我!) Servlet 3 引入了几个新的注释,包括:
@WebServlet
@WebFilter
@WebListener
还有一个名为 web-fragment.xml 的东西。这些似乎都旨在使部署servlet,过滤器和监听器成为可能,而无需编辑web.xml。
这是否意味着如果我从一个不道德的提供者那里包含一个JAR文件,他们可以在我不知情的情况下在我的Web应用程序中显示servlet,过滤器和监听器?
答案 0 :(得分:4)
也许,也许不是。 (我不确定)。但是如果你担心不道德的提供者可能会在他们的JAR中做的事情,那么他们可以用普通的旧Java做一些其他令人讨厌的事情。如果你担心这种事情,你真的需要坚持获取源代码,并且在将代码放到生产服务器上之前需要对代码进行彻底的审核。
答案 1 :(得分:3)
他们可以,但这里的问题不在规范中:它是在运行不受信任的代码。如果你允许一个你不信任的jar加载和运行,那么它可能做的事情比表面化servlet要糟糕得多。
答案 2 :(得分:2)
您可以在主web.xml部署描述符中使用<absolute-ordering>
元素仅列出WEB-INF / lib中的jar文件,您希望自动分析这些文件以获取注释和web-fragment.xml描述符在部署期间。
如果这样做,则不会自动部署其他JAR文件中的Web片段或带注释的类的内容。
答案 3 :(得分:1)
您可以控制此过程,引自here:
Servlet 3.0规范也 提供指导的选项 Web容器,无论是容器 应该处理定义的注释 在Web组件上。的名字 元素是元数据完整的,它是 web-app元素的子元素。 元数据完整元素 表示是否为元数据 信息可在 部署描述符已完成。所以, 如果元数据的值完整 element设置为true, 那就意味着元 部署中找到的信息 描述符是完整的并且最终 网上定义的注释 组件将被忽略 Servlet容器。如果值为 metadata-complete设置为false, 那就意味着信息在 部署描述符不是 完整和Web组件装饰 带注释,如果有的话,应该是 由网络扫描和处理 容器