我是Guice和Shiro的新手,我正在尝试将它与我的DB (h2)一起使用。我读过这样的文章:点击
但是就像他们说的那样,它只是为用户和角色部分工作,这对我来说是无用的。
我的shiro.ini正在工作,我成功地创建了用户、登录和注销,而没有Guice部分。
我的MyShiroModule
public class MyShiroModule extends ShiroModule{
protected void configureShiro() {
try {
bindRealm().toConstructor(IniRealm.class.getConstructor(Ini.class));
} catch (NoSuchMethodException e) {
addError(e);
}
}
@Provides
Ini loadShiroIni() {
return Ini.fromResourcePath("classpath:shiro.ini");
}
}我的舱:
公共类模块扩展AbstractModule {
@Singleton
protected void configure() {
Injector injector = Guice.createInjector(new MyShiroModule());
SecurityManager securityManager = injector.getInstance(SecurityManager.class);
SecurityUtils.setSecurityManager(securityManager);
}
}正如他们在教程中所说的。我需要添加什么才能使用我的shiro.ini的主要部分?
发布于 2014-11-05 19:50:23
我从未让JDBC领域使用Guice,因为正如您所提到的,它只是出于任何原因读取用户和组部分。最后,我根本没有使用Shiro.ini,只是像这样创建JdbcRealm:
public class ShiroAuthModule extends ShiroModule {
@Override
public void configure() {
super.configure();
// Bind your data source however you need to - I use JNDI
// but it would be easy to switch to a properties file.
bind(Context.class).to(InitialContext.class);
bind(DataSource.class).toProvider(JndiIntegration.fromJndi(DataSource.class, "java:/comp/env/jdbc/security"));
}
@Provides
@Singleton
JdbcRealm loadJdbcRealm(Ini ini, DataSource ds,
@Named("shiro.authenticationQuery") String authenticationQuery,
@Named("shiro.userRolesQuery") String roleQuery,
@Named("shiro.permissionsQuery") String permissionQuery) {
JdbcRealm realm = new JdbcRealm();
realm.setAuthenticationQuery(authenticationQuery);
realm.setUserRolesQuery(roleQuery);
realm.setPermissionsQuery(permissionQuery);
realm.setPermissionsLookupEnabled(true);
realm.setDataSource(ds);
return realm;
}
@Override
protected void configureShiro() {
// shiro.properties should be on your classpath and
// contain the named properties in loadJdbcRealm
Properties properties = Module.loadProperties(this, "shiro.properties");
Names.bindProperties(binder(), properties);
try {
bindRealm().to(JdbcRealm.class);
} catch (SecurityException e) {
addError(e);
}
}
} https://stackoverflow.com/questions/26760036
复制相似问题