2

Wicket、Spring、および Hibernate を使用して、かなり標準的な Web アプリケーションを開発しています。wicket-auth-rolesユーザーを認証するためにとを使用してきましたがspring-security、アプリケーションにさらにきめ細かい承認を追加したいと考えています。

私のアプリケーションでは、ユーザーはグループのメンバーであり、グループは、ウィケットIModelオブジェクトとして使用する Hibernate オブジェクトのサブセットにアクセスできます。そのため、ユーザーが特定のページを表示できるかどうかの決定は、ページ パスではなく、ページモデルに依存します。(私が見た Wicket の認可の実装のほとんどは、URL へのアクセスを許可するか、制限するかのいずれかであり、モデル オブジェクトに対するチェックは実行しません。)

現在、この制限を次のようなカスタムIAuthorizationStrategyとして実装しました。

@Override
public boolean isActionAuthorized(final Component component, final Action action) {
    if (!(component instanceof GenePage))
        // We only check access to the GenePage for now
        return true;

    // Figure out from component what Gene the user is trying to view
    Gene gene = (Gene) component.getDefaultModelObject();
    User user = MySession.get().getUserModel().getObject();
    return geneDAO.hasAccess(user, gene);
}

この実装の問題は、ページを完全に構成しPage#onConfigure、キャッチされていない のみをスローすることUnauthorizedActionExceptionです。これまでのところ、この例外をキャッチできなかったため、通常のプログラム フローの一部であるにもかかわらず、問題として記録されています。ページを完全に構成すると、ページ コンストラクターでいくつかのアクションがトリガーされPage#onInitialize、ユーザーが実際にページを表示できる場合にのみ実行したいと考えています。

ユーザーが Model オブジェクトにアクセスできるかどうかに基づいてページ アクセスを制限するためのより良い方法を誰かに勧めてもらえますか?

Hibernate、Spring、Spring Security、Wicket および/または Wicket-Auth-Roles を使用して、スタックのどこにでも結び付くソリューションが優先されます。他にもウィケット認証の統合があることは知っているので、この場合に役立つと思われる場合はお知らせください。

4

1 に答える 1

1

奇妙な振る舞いを期待しているように感じます。この authz メカニズムは、安全でない直接オブジェクト参照の脆弱性から保護するように設計されています。したがって、「通常のプログラム フローの一部」として使用しないでください。ある種の有効なユースケースがある場合、そのような種類の「hasAccess」障害は、有効な動作として何らかの方法で処理する必要があります。ほとんどの場合、アプリケーションに非常に固有であるため、他のメカニズム、おそらくカスタム構築されたものを使用する必要があります。

于 2013-10-11T19:55:29.100 に答える