6

URL とメソッドの両方へのアクセスを制限するように構成されたスプリング セキュリティを備えた Web アプリケーションがあります。デフォルトで完全に無効にし、顧客が必要に応じて簡単に有効にできるようにしたい (「spring-security.xml」にしかアクセスできない)。

URL インターセプトをオフにできましたが、メソッドのセキュリティはまだ有効になっています...

どんな手掛かり?

(顧客に私の web.xml を変更させたくないので、残念ながら毎回 "global-method-security" 設定を変更することはオプションではありません...)

これは私の更新された spring-security.xml 構成です。

<http auto-config='true' use-expressions="true">
    <intercept-url pattern="/**" access="permitAll" />
    <http-basic />
    <anonymous />
</http>

DelegatingFilterProxy.doFilter メソッドを次のようにオーバーライドしました。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
    final String springSecured = System.getProperty("springSecured");

    if (StringUtils.isNotBlank(springSecured) && springSecured.equalsIgnoreCase("true")) {
        // Call the delegate
        super.doFilter(request, response, filterChain);
    } else {
        // Ignore the DelegatingProxyFilter delegate
        filterChain.doFilter(request, response);
    }
}

これは私が持っているメソッドセキュリティの例です:

@RequestMapping(
        value = "applications/{applicationName}/timeout/{timeout}",
        method = RequestMethod.POST)
public
@ResponseBody
@PreAuthorize("isFullyAuthenticated() and hasPermission(#authGroups, 'deploy')")
Object deployApplication() {
    // ...
}
4

1 に答える 1

4

私があなただったら、カスタム フィルター チェーンの実装は使用せず、すぐに使用できるものだけを使用します。ネストされた要素を使用して Bean 構成 (Spring 3.0 以降) のセクションを有効および無効にできるため、次のようなものが便利な場合があります。

<beans profile="secure">
    <http auto-config='true' use-expressions="true">...</http>
</beans>

アプリケーションは、デフォルト プロファイル (および「安全な」プロファイル以外のプロファイル) で保護されなくなりました。システム プロパティ spring.profiles.active=secure を指定するか、コンテキストまたはサーブレット初期化子で明示的に設定することにより、セキュア プロファイルを有効にできます。

于 2012-11-12T12:18:22.377 に答える