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>

これがサーブレットで可能であることは知っていますが、フィルターでは機能しないようです。

ありがとう

4

1 に答える 1

4

元の回答

フィルターは ContextLoaderListener からロードされた ApplicationContext を使用するため<init-param>、フィルターへの は使用されません。代わりに、ContextLoaderListener のプロファイルをアクティブ化する方法の 1 つを使用する必要があります。1 つの方法は、以下に示すように a を使用することです。

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

ファローアップ

コメントをもとにフォローアップ。web.xml は常にデリゲートをロードしようとする DelegatingFilterProxy を常にロードするため、Spring プロファイルを使用して Filter を省略する方法はありません。デリゲートが見つからない場合、エラーが発生します。代わりに、以下に示すように、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 を使用していない場合は、何もしない Filter を作成して FilterChain を続行し、それを無効なプロファイルに配置することで、Filter を無効にすることができます。例えば:

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 に答える