【问题标题】:How to conditionally enable/disable filter in web.xml如何有条件地启用/禁用 web.xml 中的过滤器
【发布时间】:2013-09-16 15:14:34
【问题描述】:

我正在使用 Spring MVC。我有一个web.xml 和一个myapp.xml。在myapp.xml 中,我正在利用spring beans 配置文件。所以,我有两个配置文件devtest。每个都有基于环境变量启动的不同 bean。

我想知道在web.xml 中是否可以做类似的事情?在 web.xml 中,我有以下内容,我只想在环境变量为 test 时启用它

<filter>
    <filter-name>springSecurity</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurity</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

我该怎么做?

【问题讨论】:

标签: spring spring-mvc spring-security


【解决方案1】:

在您的情况下,您已经使用 DelegatingFilterProxy 将实际处理委托给名为 springSecurity 的 Spring bean。

因此,您需要将 Spring Security 配置替换为在您的 dev 配置文件中声明为 springSecurityFilter 的无操作实现。

【讨论】:

  • 现在我已经在开发模式下完全注释掉 web.xml 中的这个过滤器,然后一切正常。你能详细说明无操作的实现吗?
  • 在其doFilter() 方法中简单地调用chain.doFilter() 的实现。
  • 那么,我将创建一个Filter 的无操作实现,例如MyFilter,并在dev 配置文件中将其作为springSecurity 启动为&lt;bean id="springSecurity" class="com.somepackage.MyFilter"&gt;
  • 您还可以让MyFilter 根据某些条件创建过滤器,并让该实例处理过滤。 Here's an example using the ConfigurableSitemeshFilter 是 Sitemesh 3 的一部分
【解决方案2】:

不直接。 web.xml 是一种非常静态的格式。

通常的解决方法是安装一个过滤器,委托给注入的 bean,然后使用配置文件替换这个 bean。

【讨论】:

  • 自定义过滤器的外观如何?你能指点我一些例子吗?
【解决方案3】:

您可以在 web.xml(和 server.xml)中使用属性变量替换:

<url-pattern>${urlPattern}</url-pattern>

您将在哪里传递 JVM 参数,例如 -DurlPattern="/"

您可以使用 o/s 环境变量,如下所示:

set "CATALINA_OPTS=-DurlPattern=%SOME_SYSTEM_ENVIRONMENT_VARIABLE%"

bin/setenv.bat 中(您需要创建此文件)。 *nix 中的类似功能。

【讨论】:

    猜你喜欢
    • 2015-08-28
    • 1970-01-01
    • 2021-04-14
    • 2013-11-30
    • 1970-01-01
    • 2019-03-01
    • 2021-11-26
    • 1970-01-01
    • 2015-07-20
    相关资源
    最近更新 更多