2016-05-04 18 views
2

Springのメカニズムに関する質問があります。ここにシナリオがあります:@Resourceが@PreAuthorizeで動作しないのはなぜですか?

私は、@Resource注釈によって注入されたいくつかの依存関係を持つ抽象コントローラクラスを持っています。サブクラスには、要求を処理するための@RequestMappingアノテーションが含まれています。これまではすべて正常に動作し、すべての依存関係が注入されました。

今私は、私たちのプロジェクトに春のセキュリティを導入しようとしていますが、私は@PreAuthorizeを使用しようとすると、依存性の注入は、現在失敗したので、私はいくつかの@ModelAttribute方法でNullPointerExceptionを取得します。私は、Springが私のコントローラのプロキシクラスを作成するが、何らかの形ですべての依存関係を注入しないことが分かった。

私は、プロキシがターゲットの依存関係を使用しなければならない、あるいはすべての依存関係をプロキシ自体に注入する必要があることをSpringに伝える構成が不足している可能性があります。

誰かがアイデアを持っていれば、私はそれを聞いてうれしいです。

答えて

0

preauthorizeアノテーションを使用する場合は、コントローラーにないサービスレイヤーで使用することをお勧めします。 これはまた、ここでhttp://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/faq.html#faq-method-security-in-web-context あなたが(コントローラに定義されてrequestmapping IE)のURLを保護したい場合は最良の方法は、使用している

を「一般的に、我々は、個々のウェブコントローラ上のサービス層でメソッドのセキュリティを適用するのではなく推薦する」文書化されていますインターセプト-URLパターンあなたはまだあなたが(すでにここSecuring controller method with @RolesAllowed and @PreAuthorize存在していること)これらの指示に従うことができ コントローラで事前認証を使用する場合は、このURLに http://docs.spring.io/spring-security/site/docs/4.0.x/reference/html/core-web-filters.html#filter-security-interceptor

を説明するよう

は、事前認証およびJSR-250のアノテーションを使用するには、

  • 注釈あなたが持つセキュリティの設定クラス春なければなりません: @EnableGlobalMethodSecurity(prePostEnabledを=真、jsr250Enabled =真)
  • 、あなたのアプリケーションの春のどこにも使用している場合JDKプロキシを持つAOP、メソッドセキュリティを使用するすべてのコントローラクラスを作成するすべての保護されたメソッドを宣言するインターフェイスを実装する
  • CGLIBプロキシを持つSpring AOPを@EnableGlobalMethodSecurityに追加: @ EnableGlobalMethodSecurity(prePostEnabled = true、jsr250Enabl (CGLIBクラスはSpring 3.2以降に含まれています) CGLIBとJDKプロキシを混在させないようにしました。(CGLIBクラスはSpring 3.2以降に含まれています) CGLIBプロキシを3.2で使用する場合は、実行時に複数のセクションが単一の統合自動プロキシ作成者に集約され、指定されたセクション(通常は異なるXML bean定義ファイルからのもの)の中で最も強いプロキシ設定が適用されます。これはandにも当てはまります。明確にするには、 'proxy-target-class = "true"'をonにするか、要素がCGLIBプロキシを3つすべて強制的に使用するようにします。

が、これは

を役に立てば幸い
関連する問題