2012-04-03 18 views
2

私たちは、Springの@preAuthorizeタグを使ってメソッドレベルのセキュリティを実装しようとしています。すべてがコンパイルされて正常に動作しますが、制限は発生しません。これは管理者のみの方法ですが、非管理者でもアクセスできます。preAuthorizeアノテーションが機能していないようです。

@PreAuthorize("(hasRole('ROLE_ADMIN'))") 
public Some doIt(Some Input) { 
      do something; 
    return some; 
} 

しかし、誰もが何かの作品を持つことができます。

<http use-expressions="true" create-session="never" entry-point-ref="oauthAuthenticationEntryPoint" xmlns="http://www.springframework.org/schema/security" authentication-manager-ref="authManager"> 
    <intercept-url pattern="/mocks/some-service" access="hasRole('ROLE_OTHER')" /> 
    <form-login authentication-failure-url="/login.jsp" default-target-url="/login.jsp" login-page="/login.jsp"></form-login> 
    <custom-filter ref="resourceServerFilter" after="EXCEPTION_TRANSLATION_FILTER" /> 

    </http> 

<security:global-method-security pre-post-annotations="enabled" /> 

そしてここでは、メソッド自体である:ここでは、文脈でそれを設定した方法です。私は何が欠けていますか?どんな助けでも大歓迎です。

答えて

15

プライベートでもパブリックでも、同じクラス内からアクセスされるメソッドにアノテーションを付けることはできませんでした。注釈は、外部からアクセスされるパブリックメソッドでのみ機能します。

誰かが同じ間違いをするのを助けることを望みます。

+1

http://static.springsource.org/spring-security/site/faq/faq.html#faq-method-security-in-web-contextこのリンクは、サービスレイヤメソッドを保護するアドバイスです。それらは他のプライベート/パブリックメソッドで頻繁に使用されます。 –

+1

本当にあります! PreAuthorizeは最初に呼び出されたメソッドで正しく呼び出されました。その後、そのメソッドが同じクラスの別のセキュリティで保護されたメソッドを呼び出すときに呼び出されませんでした。さまざまなハンドラと評価者を経て、時代を過ごしました。これはすべてでした.... – muttonUp

+0

「公共の方法だけで仕事」のおかげで、誤解を招くのは、メソッドがリクエストを処理するために登録されていて、 – Bax

6

これを見てみてください。要約するとhttp://static.springsource.org/spring-security/site/faq/faq.html#faq-method-security-in-web-context

「あなたはWebコンテキストを する宣言を移動するためのいずれかの必要があるか、メイン に確保したい豆を移動アプリケーションコンテキスト。

+0

私はまったく同じ問題を抱えていて、これを修正しました。ありがとう! – electrotype

+0

私のために働かない。 –

関連する問題