3

私の問題:

プラグインの認証メカニズムを使用せずに、Grails アプリケーションで Spring Security プラグインのアクセス制御/承認メカニズムを使用したいと考えています。私が見つけたさまざまな Grails Spring Security プラグインの例 (このようなもの) は、これら 2 つの機能を組み合わせています。アクセス制御を行う簡単な方法はありますか?

バックグラウンド:

  • 役割ベースのアクセス制御を既存のアプリに追加したいと考えています。コントローラーに注釈を付けるか、アクセス制御を設定するために Config.groovy マップ アプローチを使用したいと考えています。
  • アプリには既にユーザー ドメイン クラスがあります。
  • ユーザー ドメイン クラスは、BCrypt を使用してパスワードの暗号化を既に処理しています。
  • アプリには「ロール」ドメイン クラスがありません。
  • ログインとログアウトを処理するためのコントローラー アクション、ビュー、およびビジネス ロジックが既にあります。これをプラグインの実装に置き換えることに興味はありません。

正しい軌道に乗っていますが、あまり役に立ちません:

この他の質問で説明されているように、これが可能であることはわかっています。しかし、その質問とその回答は、生のSpring Securityフレームワークを使用してJavaアプリでそれを行う方法を説明しています。Grails Spring Security プラグインの最新バージョン (この記事の執筆時点では 1.2.7.3) と互換性のある方法でこれを行う方法を説明してくれる人が欲しいです。プラグインによってすでに処理されている車輪を再発明したくありません。

さらに、このではこれを行う方法を説明していますが、Spring Security 2.x を使用する古いバージョンのプラグインに基づいているため、古くなっているように見えます。また、アプリの 1 つの部分に対してのみカスタム認証を使用しますが、Spring Security プラグインのドメイン クラスを別の場所で使用しているように見えます。

どうやってするの?

誰かが私のためにアプローチをレイアウトできますか? Role ドメイン クラスを作成する必要があると思います。その後、カスタム認証オブジェクトなどが含まれると思います。しかし、プラグインの既存のコードを使用するようにフックするにはどうすればよいでしょうか?

4

2 に答える 2

3

カスタム認証プロバイダーを使用することもできますが、最近の講演の一環として行った更新バージョンがあります。サンプルアプリとトークのビデオへのリンクがあるこのブログ投稿を参照してください:http://burtbeckwith.com/blog/?p = 1090

カスタムを使用するのは簡単UserDetailsServiceです-これはプラグインに対して行われる最も一般的なカスタマイズであり、ドキュメントに独自の章があります:http: //grails-plugins.github.com/grails-spring-security-core/ docs / manual / guide / 11%20Custom%20UserDetailsS​​ervice.html

基本的に、Spring Securityインスタンスを作成する必要がありUser、Spring Security(およびプラグイン)はデータの取得方法を気にしません。したがって、カスタムUserDetailsServiceは、現在の認証スキームとSpringSecurityの間の架け橋である必要があります。

于 2012-09-11T20:54:26.327 に答える
1

I ended up creating my own access control/authorization mechanism rather than using the Spring Security plugin. I never could figure out how to separate the plugin's authentication mechanism from the authorization mechanism. Doing the work myself was very easy.

I did the following:

  • Created a new Role domain class.
  • Added a Set property and hasMany relationship to my User domain class.
  • Created a new AuthorizationFilters filter. This is where I put in my authorization rules. In this filter I can check to see if a user has the role necessary to access the given URL and redirect to a login page, redirect to a "not authorized page" or allow them to pass.

This doesn't have the nice syntactic sugar of the plugin and isn't quite as concise either, but it was very easy to implement and understand.

于 2012-09-17T02:16:58.893 に答える