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 を使用して、スタックのどこにでも結び付くソリューションが優先されます。他にもウィケット認証の統合があることは知っているので、この場合に役立つと思われる場合はお知らせください。