2

私の Web サービスでは、ユーザーの権限が頻繁に変更されます。
この場合、ユーザーの権限を効果的にチェックするにはどうすればよいでしょうか?

すべてのコントローラーで一時的にユーザーの権限をチェックするコードを書きました。しかし、この方法はメンテナンスには適していないと思います。

すべてのコントローラーにチェックメソッドを書かずにユーザーの権限をチェックするにはどうすればよいですか?

4

3 に答える 3

1

何をしているのか不明 - Spring Security は、ユーザーのセキュリティ コンテキストで権限を自動的に追跡します。他の理由でプログラムで確認する必要がある場合は、HandlerInterceptorインターフェイスを実装し、preHandle メソッドで呼び出しSecurityContextHolder.getContext().getAuthentication()て現在のユーザーを取得します。その後、ユーザーの権限を確認できます。

インターセプターは次のように構成されます。

<mvc:interceptors>
    <bean class="com.my.package.MyInterceptor" />
</mvc:interceptors>
于 2011-08-16T14:17:49.430 に答える
0

intercept-url必要な役割を持つ要素を構成に追加します。

<http auto-config='true'>
  <intercept-url pattern="/**" access="ROLE_FOO" />
</http>
于 2011-08-16T21:22:51.660 に答える
0

HandlerMethodArgumentResolverを使用して、Spring がコントローラー メソッドに GrantedAuthority を注入できるようにします。ユーザーが複数の権限を持つことができる場合、ユーザーの権限を保持するためのクラスを作成する必要があります (名前を として付けることができますGrantedAuthorities)。完了すると、コントローラー メソッドは次のようになります。

@RequestMapping({"/xyz"})
public String handleXYZRequest(GrantedAuthorities authorities) {
    /* use authorities if not null */
    ...
}

リゾルバーでは、権限を取得するために現在使用しているのと同じコードを使用し、null またはGrantedAuthoritiesオブジェクトのいずれかを返します。古いバージョンの Spring を使用している場合は、それを使用WebArgumentResolverして AnnotationMethodHandlerAdapter に登録します。

SecurityContextHolder上記のアプローチはコードの重複を回避し、コントローラーメソッドで必要なものを挿入するために使用できます。

編集

これは、温室で使用されるアプローチに似ています。プリンシパル ( Account オブジェクト) が引数リゾルバーを介してコントローラーに挿入されるWebConfigを参照してください。

于 2011-08-16T21:50:01.623 に答える