2

是否可以在 web.xml 中使用基于配置文件的过滤器?例如

    <filter>
        <filter-name>springSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
         <init-param>
            <param-name>spring.profiles.active</param-name>
            <param-value>secured</param-value>
        </init-param>
    </filter>

我知道这对于 servlet 是可能的,但我似乎无法让它适用于过滤器。

谢谢

4

1 回答 1

4

原始答案

Filters 使用从 ContextLoaderListener 加载的 ApplicationContext,因此<init-param>不使用到 Filter。相反,您将希望使用其中一种激活 ContextLoaderListener 的配置文件的方法。一种方法是使用 a ,如下所示:

<context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>secured</param-value>
</context-param>

跟进

根据评论跟进。没有办法使用 Spring 配置文件省略过滤器,因为 web.xml 将始终加载 DelegatingFilterProxy,它总是尝试加载其委托。如果委托丢失,您将收到错误消息。相反,您可以创建一个禁用 Spring Security 的配置文件,如下所示:

<b:beans profile="default,secured">
  <http auto-config="true" use-expressions="true">
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
  </http>
  <authentication-manager>
    <authentication-provider>
      <user-service>
        <user name="user" password="password" authorities="ROLE_USER" />
      </user-service>
    </authentication-provider>
  </authentication-manager>
</b:beans>
<b:beans profile="insecure">
  <http security="none" />
</b:beans>

然后,您可以通过激活 web.xml 中的不安全配置文件来禁用 Spring Security,如下所示。

<context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>insecure</param-value>
</context-param>

如果您没有使用 Spring Security,您可以通过创建一个过滤器来禁用过滤器,该过滤器除了继续过滤器链并将其放置在禁用的配置文件中之外什么都不做。例如:

public class DoFilterChainFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        chain.doFilter(request, response);
    }
    public void destroy() { }
    public void init(FilterConfig filterConfig) throws ServletException { }
}
于 2012-08-02T22:21:58.613 回答