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