3

Guiceを使用してJettyサーバーを配線していますが、 Apache Shiroでセキュリティを追加したいと考えています。

Shiro にはServletContextを構成する必要があるようですが、問題は、構成時に ServletContext を持っていないことです (たとえば、ドキュメントに記載されているServletModule内)。ServletContextGuiceServletContextListenerで利用できますが、現時点では、私のインジェクターは既に作成されているため、Shiroモジュールをインストールするには遅すぎます。

Guiceプロバイダー ( Provider<ServletContext> )を介してShiroにServletContextを提供しようとしましたが、まだ成功していません。このプロバイダーは、作成後に ServletContext を提供すると思いました。これにより、警告も表示されます。

"com.google.inject.servlet.InternalServletModule$BackwardsCompatibleServletContextProvider get
WARNING: You are attempting to use a deprecated API (specifically, attempting to @Inject ServletContext inside an eagerly created singleton. While we allow this for backwards compatibility, be warned that this MAY have unexpected behavior if you have more than one injector (with ServletModule) running in the same JVM."

インジェクターが作成された後、Shiro Web モジュールをどのようにインストールできますか?

4

2 に答える 2

2

同じ問題があり、@ Mirceaからの情報を使用して、GuiceServletContextListerをServletContextにキャストするだけでした。

Guice.createInjector(new ShiroWebModule((ServletContext)this);

これがお役に立てば幸いです

于 2013-01-02T09:25:12.267 に答える
2

ServletContext を取得する標準的な方法は、GuiceServletContextListener.

APIの大きな見落としです。

http://code.google.com/p/google-guice/issues/detail?id=603

ここにもチュートリアルがあります:

https://issues.apache.org/jira/browse/SHIRO-320

(編集:コメントを読んだ後)2つのオプションがあります:

  1. インジェクターのみを作成するリファクチャ コードGuiceServletContextListener
  2. 子インジェクターを使用する (トリッキー)

Child Injector を使用すると、子インジェクターによって作成されたインスタンスのみが「Shiroed」を取得します。注意: 子インジェクター用に作成されたジャストインタイム バインディングは、可能な限り祖先インジェクターで作成されます。

サーブレットとフィルターは期待どおりに機能しますが、既に作成されたインジェクターにビジネス ロジックがある場合、Shiro は表示されません。いくつかの方法でこれを回避できます...

于 2012-11-30T15:46:22.663 に答える