2011-01-31 14 views
4

私はJerseyで残りのAPIを開発し、Google Guice for Dependency InjectionとApache Shiroをセキュリティフレームワークとして使用したいと考えています。Apache ShiroとGoogle Guice:レルムへの依存関係の挿入

認証のために私はEntityManagerに接続されたカスタムオーセンティケータを注入する必要があるカスタムレルムを作成しました。

ただし、依存関係はレルムに注入されません。 shiro.ini(使用されたレルムを定義する必要があります)はguiceによって管理されていないと思います。

どのようにApache Shiro、特に使用されているレルムに依存性を注入できますか?

私のweb.xmlのみ

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
<filter> 
    <filter-name>guiceFilter</filter-name> 
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>guiceFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

<listener> 
    <listener-class>GuiceServletConfig</listener-class> 
</listener> 
</web-app> 

マイGuiceServletConfigをGuiceのためにマッピングされたフィルタを有するCustomRealm含むすべての依存関係を設定

public class GuiceServletConfig extends GuiceServletContextListener { 

@Override 
protected Injector getInjector() { 
    return Guice.createInjector(new DbModule(), new JerseyServletModule() { 

     @Override 
     protected void configureServlets() { 
      // ... 
      // CustomRealm is only used when i use it as an eager singleton 
      bind(CustomRealm.class).asEagerSingleton(); 
      bind(org.apache.shiro.web.servlet.IniShiroFilter.class).in(Singleton.class); 
      filter("/*").through(org.apache.shiro.web.servlet.IniShiroFilter.class); 
      serve("/api/*").with(GuiceContainer.class); 
     } 
    }); 
} 
} 

のみがレルムを定義INIシロ

[main] 
myRealm = CustomRealm 
[users] # for testing 
root = secret,admin 
[roles] # for testing 
admin = * 
[urls] 
/api/** = authcBasic 

答えて

5

Apache ShiroのINI設定は、多くのユースケースに最適ですが、完全なpowe春やGuiceのようなIoCフレームワークでは、ShiroのすべてをIoCメカニズム内で直接構成する方がよいでしょう。 ShiroのSpring統合は、これの良い例として役立ちます:http://shiro.apache.org/spring.html Guice環境では、ほぼ同じことをすることをお勧めします。

これをしたくなく、INIにとどまっている場合、ShiroにはRealmFactoryの概念があります。

Guice環境と通信し、Guice設定のレルムを 'プル'するRealmFactory実装を作成できます。そして、あなたは史郎INIであなたのRealmFactory実装を定義します。

注しかし史郎さんINIだけRealmFactory経由INIの外からのレルムのインスタンスを取得するサポートしていること - 他のすべての参照オブジェクトはINIで定義されている必要があります。 Shiro Jiraの問題を開いて、ただの領域だけでなく、より一般的な工場のサポートを求めることもできます。

GuiceのがINIよりも強力ですので、最終的に、(SecurityManagerの、レルム、ShiroFilter、など)可能であればGuiceの中四郎のすべてを設定することを推奨し

+0

私はiniファイルをスキップして、プレーンを使用してうれしいですdi。私は春のガイドを使用してguiceをセットアップすることができませんでした(私はguice/springに精通していません)。自分のRealmを使用するためにGuiceServletConfigに挿入する必要があるのは何ですか? –

関連する問題