Spring/Spring Security の代わりに Guice/Shiro を使い始めています。Shiro のサイトから例を見てきましたが、すべての構成例は INI ファイルの例として作成されています。Guice サーブレットは構成することを意図しているため、プレーンな Java で Shiro を構成することは可能ですか?
3719 次
1 に答える
14
はい、可能ですが、Guice にレルムを作成させたい場合は、いくつかのグルー コードが必要です。
- バインド レルムの実装:
bind(Realm.class).to(MyRealm.class).in(Singleton.class);
- WebSecurityManager をバインドします。
@Provides @Singleton WebSecurityManager securityManager(Realm realm) {
DefaultWebSecurityManager sm = new DefaultWebSecurityManager();
sm.setRealm(realm);
return sm;
}
- Shiro フィルターの 1 つをサブクラス化して、Guice が提供する WebSecurityManager を使用できるようにします。
public class SecurityFilter extends IniShiroFilter {
static class SecurityManagerFactory extends WebIniSecurityManagerFactory {
private final WebSecurityManager securityManager;
public SecurityManagerFactory(WebSecurityManager securityManager) {
this.securityManager = securityManager;
}
public SecurityManagerFactory(WebSecurityManager securityManager, Ini ini) {
super(ini);
this.securityManager = securityManager;
}
@Override
protected SecurityManager createDefaultInstance() {
return securityManager;
}
}
private final Provider<WebSecurityManager> securityManager;
@Inject
SecurityFilter(Provider<WebSecurityManager> securityManager) {
super();
this.securityManager = securityManager;
}
protected Map<String, ?> applySecurityManager(Ini ini) {
SecurityManagerFactory factory;
if (ini == null || ini.isEmpty()) {
factory = new SecurityManagerFactory(securityManager.get());
} else {
factory = new SecurityManagerFactory(securityManager.get(), ini);
}
setSecurityManager((WebSecurityManager) factory.getInstance());
return factory.getBeans();
}
}
- フィルターを構成します。
Joiner lines = Joiner.on("\n");
Map<String, String> config = ImmutableMap.of("config", lines.join(
"; here you can provide additional ini",
"[roles]",
"admin = *",
"[urls]",
"/secure/** = authcBasic"
));
filter("/*").through(SecurityFilter.class, config);
于 2011-05-04T19:16:02.113 に答える