2012-05-04 19 views
1

私はコントローラを保護するためにGrails 2.0.3と最新のSpring Security Pluginを使用しています。Grails Spring Securityで@Securedが無視されるのはなぜですか?

しかし、何らかの形でコントローラが保護されていません。

import grails.plugins.springsecurity.Secured 

@Secured("ROLE_USER") 
class SettingsController extends UtilController { 
    def index(){ 
    render "should not run while not logged in" 
    } 
} 

ログインしていないときにメッセージが表示されます。 springSecurityServiceを注入すると、正しいログイン状態(true/false)が表示されるため、アノテーションは処理されません。

「IS_AUTHENTICATED_FULLY」要件を追加してアノテーションをメソッドに移動しようとしましたが、それは役に立ちません。

何が関連していますか?

答えて

5

@Secured注釈受け入れの役割のリスト(String[])、あなたは文字列の配列に文字列を変換することに問題があると思います。

@Secured(["ROLE_USER"])とお試しいただけますか?

+0

Iは '@Secured([ "ROLE_USER"、 "IS_AUTHENTICATED_FULLY"])試し、単に' @Secured([ "ROLE_UNEXISTENT"]) 'しかし、それは助けにはならない。おそらくそうではないでしょう。 –

+0

'resuestmap'セキュリティを使用するように設定していないのですか? –

-2

私は@securedアノテーションは、クラス内ではないコントローラ内のメソッドに対してのみ機能すると思います。

はこのようにそれを使用してみてください:

import grails.plugins.springsecurity.Secured 

class SettingsController extends UtilController { 
    @Secured(["ROLE_USER"]) 
    def index(){ 
    render "should not run while not logged in" 
    } 
} 
+0

これはROLE_ADMIN> ROLE_USERのような階層を使用している場合に特に適しています。コントローラー・レベルは、ANYアクションにアクセスできる最下位レベルを設定します。次に、より高いレベルを要求するように特定のアクションを設定できます。 ROLE_USERを持っていればインデックスにアクセスできますが、ROLE_USERとROLE_ADMINがあればadminIndexを見ることができます... – Kelly

5

あなたは、configファイルで

grails.plugins.springsecurity.securityConfigType = "Annotation" 

以外の何かを持っていますか?

+0

あなたは私の日を保存しました:) – user666

0

私の場合の解決策が見つかりました。 grails.plugins.springsecurityのリストにfilterInvocationInterceptorがあることを確認してください。例のようConfig.groovyでフィルタ名

grails.plugins.springsecurity.filterChain.filterNames = [ 
    'securityContextPersistenceFilter', 'logoutFilter', 
    'authenticationProcessingFilter', 'myCustomProcessingFilter', 
    'rememberMeAuthenticationFilter', 'anonymousAuthenticationFilter', 
    'exceptionTranslationFilter', 'filterInvocationInterceptor' 
] 
関連する問題