Webサービスでユーザーの権限が頻繁に変更されます。
この場合、ユーザーの権限を効果的にチェックするにはどうすればよいですか?spring3コントローラメソッドでユーザーの現在の権限を確認するにはどうすればよいですか?
すべてのコントローラでユーザーの権限を一時的にチェックするコードを書きました。 しかし、私はこの方法はメンテナンスのためには良くないと思う。
コントローラごとにチェック方法を書き込まずにユーザーの権限を確認するにはどうすればよいですか?
Webサービスでユーザーの権限が頻繁に変更されます。
この場合、ユーザーの権限を効果的にチェックするにはどうすればよいですか?spring3コントローラメソッドでユーザーの現在の権限を確認するにはどうすればよいですか?
すべてのコントローラでユーザーの権限を一時的にチェックするコードを書きました。 しかし、私はこの方法はメンテナンスのためには良くないと思う。
コントローラごとにチェック方法を書き込まずにユーザーの権限を確認するにはどうすればよいですか?
あなたがやっていることがわかりません - Spring Securityは自動的にユーザーのセキュリティコンテキストで権限を追跡します。他の理由でプログラムでチェックする必要がある場合は、HandlerInterceptor
インターフェイスを実装し、preHandleメソッドではSecurityContextHolder.getContext().getAuthentication()
を呼び出して現在のユーザーを取得します。ユーザーの権限を確認することができます。次のように
インターセプタを設定することになります。
<mvc:interceptors>
<bean class="com.my.package.MyInterceptor" />
</mvc:interceptors>
は例えば、必要とされる役割を使用して設定するintercept-url
要素を追加します。
<http auto-config='true'>
<intercept-url pattern="/**" access="ROLE_FOO" />
</http>
使用HandlerMethodArgumentResolverスプリングは、コントローラ方式でGrantedAuthorityを注入できるようにします。ユーザーが複数の権限を持つことができる場合は、ユーザーの権限を保持するクラスを作成する必要があります(名前はGrantedAuthorities
となります)。あなたが完了したら、あなたのコントローラのメソッドは次のようになります:
@RequestMapping({"/xyz"})
public String handleXYZRequest(GrantedAuthorities authorities) {
/* use authorities if not null */
...
}
リゾルバでは、あなたが現在当局を取得するために使用している同じコードを使用し、それがnullまたはGrantedAuthorities
オブジェクトのいずれかを返します。旧バージョンのSpringを使用している場合は、WebArgumentResolver
を使用してAnnotationMethodHandlerAdapterに登録してください。
上記のアプローチは、コードの重複を避け、コントローラーメソッドでSecurityContextHolder
から必要なものを注入するために使用できます。
編集
これは、温室で使用されるアプローチと同様です。プリンシパル(アカウントオブジェクト)が引数リゾルバを介してコントローラに挿入されているWebConfigを参照してください。
ここで素敵なラッパーを使用することもできます:http://stackoverflow.com/a/3412166/26510 –