仅在某些环境中应用servlet过滤器

时间:2011-03-07 23:10:54

标签: java servlets servlet-filters

我有一个servlet过滤器,它为每个请求添加了随机延迟量。现在我在开发时切换它,并在部署到生产服务器之前将其关闭,但我必须手动完成。

我能做些什么来自动检测开发环境并只在那里应用过滤器?

2 个答案:

答案 0 :(得分:2)

我们使用系统属性在每个应用程序服务器上设置一个属性,允许应用程序确定它是在live还是dev上运行。如果您可以控制这些环境,这意味着您可以标准化命名约定等,则效果最佳。

我们使用Tomcat,并且已经修改了启动和关闭脚本以向JVM添加一些额外的属性。例如:

JVM_OPTS="-Dfuturemedium.javalogs=/usr/share/tomcat_a/logs/ \
-Dfuturemedium.server.development=false \
-Dfuturemedium.smtp.server=localhost"

这意味着特定于环境的属性从每个开发人员手中取出并推送到环境本身,在那里它们可以由sys admin控制,而不是在整个构建文件等中重复。

然后我们可以通过以下方式在代码中访问这些属性:

boolean dev = Boolean.parseBoolean(System.getProperty("futuremedium.server.development", "false"));

以有条件地执行某些操作,具体取决于它是live还是dev。 或者在log4j.properties中我们可以使用:

log4j.appender.myapplication_file.File=${futuremedium.javalogs}myapplication.log

在任何CLI应用程序的命令行中指定这些相同的属性也很容易,因此它在容器内部或外部相当透明。

不确定您使用的是哪种IDE,但如果您在其中运行应用服务器,则应该可以通过IDE控制这些额外的属性。 对于Netbeans中的Tomcat,请转到Tools - >服务器 - > Tomcat - >平台 - > VM选项

答案 1 :(得分:0)

如果您有一些可通过build.xml访问的属性,那么build.xml可以操作您的web.xml以启用根据环境禁用所需的过滤器。 - 假设您使用的是build.xml。